编译Mysql时configure: error: No curses/termcap library found 的错误解决方法
编译Mysql时configure: error: No curses/termcap library found 的错误解决方法
在编译Mysql时
./configure --prefix=DIR
,如果出现了以下错误:
......
checking for tgetent in -ltermcap... no
checking for termcap functions library... configure: error: No curses/termcap library found
说明 curses/termcap 库没有安装
apt-cache search curses | grep lib
安装 libncurses5-dev ,然后重新运行配置
apt-get install libncurses5-dev
../depcomp: line 512: exec: g++: not found
make[2]: *** [my_new.o] Error 127
make[2]: Leaving directory `/usr/local/src/mysql-5.0.41/mysys'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/mysql-5.0.41'
make: *** [all] Error 2
解决办法:
安装gcc-c++
yum install gcc-c++
安装完成之后再次编译make
可能会出现如下错误:
../include/my_global.h:909: error: redeclaration of C++ built-in type `bool'
make[2]: *** [my_new.o] Error 1
make[2]: Leaving directory `/home/tools/mysql-5.0.22/mysys'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/tools/mysql-5.0.22'
make: *** [all] Error 2
是因为gcc-c++是在configure之后安装的,此时只需重新configure后再编译make即可。
用5.1版本的时候如下方法是可以解决中文编码问题的
----在配置文件[mysqld]和[client]节下分别添加: default-character-set = utf8
2.不知到是不是手动编译的原因,在5.5.8中配置文件中用上述方法会造成数据库服务无法启动。
----错误日志如下:( datadir/username.err为错误日志文件)
----------------------------------------------------
mysqld_safe mysqld from pid file /home/cyberwym/Programming/mysql/mysqldata/cyberwym.pid ended
...........
...........
[ERROR] /usr/local/mysql/bin/mysqld: unknown variable 'default-character-set=utf8'
[ERROR] Aborting
----------------------------------------------------
----这样会造成pid文件(datadir/username.pid)无法更新
----在配置文件[mysqld]和[client]节下分别去掉: default-character-set = utf8 后,数据库服务就启动正常了
cmake两个错误的解决方法今天在linux上配置环境时遇到了两个cmake的问题,在网上找了半天才找到解决方法。菜鸟特此记下解决方法,以备后用。
问题1:
-- Check for working CXX compiler: CMAKE_CXX_COMPILER-NOTFOUND
CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
解决方法:
sudo apt-get install gcc-c++
问题2:
CMake Error at /usr/share/cmake-2.6/Modules/FindKDE4.cmake:84 (MESSAGE):
ERROR: cmake/modules/FindKDE4Internal.cmake not found in
/home/mm/.kde/share/apps;/usr/share/kde4/apps[/code]
解决方法:
sudo apt-get install kdelibs5-dev
若遇到如下错误提示:
CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
解决:yum install gcc-c++ -y
===========================
mysql的data目录是在/usr/local/mysql/data,你可以移到/data下:
mv /usr/local/mysql/data /
vi /etc/my.cnf的[mysqld]中加入:
datadir = /data
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
源码方式安装mysql5.5.8出现sql/CMakeFiles/sql.dir/sp_head.cc.o] Error 1错误解决方法
源码安装mysql-5.5.8版本在make的时候如果遇到以下的错误
make[2]: *** [sql/CMakeFiles/sql.dir/sp_head.cc.o] Error 1 make[2]:
*** Waiting for unfinished jobs…. make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2 make: *** [all] Error 2
解压mysql-5.5.8的安装包,configure之后进到解压后的文件夹下
cd mysql-5.5.8/sql
修改以下文件:
sql/sp_head.cc
sql/sql_connect.cc
sql/sql_cursor.cc
sql/sql_parse.cc
sql/sql_prepare.cc
具体修改如下:
把红色部分修改为蓝色的部分然后保存退出
modified:
sql/sp_head.cc
sql/sql_connect.cc
sql/sql_cursor.cc
sql/sql_parse.cc
sql/sql_prepare.cc
=== modified file ‘sql/sp_head.cc’
— a/sql/sp_head.cc 2010-11-18 15:01:58 +0000
+++ b/sql/sp_head.cc 2010-12-08 16:47:21 +0000
@@ -3159,7 +3159,7 @@ sp_instr_stmt::exec_core(THD *thd, uint
MYSQL_QUERY_EXEC_START(thd->query(),
thd->thread_id,
(char *) (thd->db ? thd->db : ""),
- thd->security_ctx->priv_user,
+ &thd->security_ctx->priv_user[0],
(char *)thd->security_ctx->host_or_ip,
3);
int res= mysql_execute_command(thd);
=== modified file ‘sql/sql_connect.cc’
— a/sql/sql_connect.cc 2010-12-14 14:34:23 +0000
+++ b/sql/sql_connect.cc 2010-12-08 16:47:21 +0000
@@ -736,7 +736,7 @@ void do_handle_one_connection(THD *thd_a
if (rc)
goto end_thread;
- MYSQL_CONNECTION_START(thd->thread_id, thd->security_ctx->priv_user,
+ MYSQL_CONNECTION_START(thd->thread_id, &thd->security_ctx->priv_user[0],
(char *) thd->security_ctx->host_or_ip);
prepare_new_connection_state(thd);
=== modified file ‘sql/sql_cursor.cc’
— a/sql/sql_cursor.cc 2010-11-12 12:56:21 +0000
+++ b/sql/sql_cursor.cc 2010-12-08 16:47:21 +0000
@@ -111,7 +111,7 @@ int mysql_open_cursor(THD *thd, select_r
MYSQL_QUERY_EXEC_START(thd->query(),
thd->thread_id,
(char *) (thd->db ? thd->db : ""),
- thd->security_ctx->priv_user,
+ &thd->security_ctx->priv_user[0],
(char *) thd->security_ctx->host_or_ip,
2);
rc= mysql_execute_command(thd);
=== modified file ‘sql/sql_parse.cc’
— a/sql/sql_parse.cc 2010-12-14 14:34:23 +0000
+++ b/sql/sql_parse.cc 2010-12-08 16:47:21 +0000
@@ -877,7 +877,7 @@ bool dispatch_command(enum enum_server_c
thd->profiling.start_new_query();
#endif
MYSQL_COMMAND_START(thd->thread_id, command,
- thd->security_ctx->priv_user,
+ &thd->security_ctx->priv_user[0],
(char *) thd->security_ctx->host_or_ip);
thd->command=command;
@@ -1018,7 +1018,7 @@ bool dispatch_command(enum enum_server_c
break; // fatal error is set
MYSQL_QUERY_START(thd->query(), thd->thread_id,
(char *) (thd->db ? thd->db : ""),
- thd->security_ctx->priv_user,
+ &thd->security_ctx->priv_user[0],
(char *) thd->security_ctx->host_or_ip);
char *packet_end= thd->query() + thd->query_length();
/* ‘b’ stands for ‘buffer’ parameter’, special for ‘my_snprintf’ */
@@ -1070,7 +1070,7 @@ bool dispatch_command(enum enum_server_c
MYSQL_QUERY_START(beginning_of_next_stmt, thd->thread_id,
(char *) (thd->db ? thd->db : ""),
- thd->security_ctx->priv_user,
+ &thd->security_ctx->priv_user[0],
(char *) thd->security_ctx->host_or_ip);
thd->set_query_and_id(beginning_of_next_stmt, length,
@@ -5489,7 +5489,7 @@ void mysql_parse(THD *thd, char *rawbuf,
MYSQL_QUERY_EXEC_START(thd->query(),
thd->thread_id,
(char *) (thd->db ? thd->db : ""),
- thd->security_ctx->priv_user,
+ &thd->security_ctx->priv_user[0],
(char *) thd->security_ctx->host_or_ip,
0);
=== modified file ‘sql/sql_prepare.cc’
— a/sql/sql_prepare.cc 2010-12-14 10:46:00 +0000
+++ b/sql/sql_prepare.cc 2010-12-08 16:47:21 +0000
@@ -3759,7 +3759,7 @@ bool Prepared_statement::execute(String
MYSQL_QUERY_EXEC_START(thd->query(),
thd->thread_id,
(char *) (thd->db ? thd->db : ""),
- thd->security_ctx->priv_user,
+ &thd->security_ctx->priv_user[0],
(char *) thd->security_ctx->host_or_ip,
1);
error= mysql_execute_command(thd);
这主要是MSYQL5.5.8的一个BUG,一个数组的读取问题。只要把以上的文件修改了之后就可以正常安装了,我在CentOS 5.5 64位系统下安装通过。
如果不想自己手动修改的读者可以下载我修改好的文件到对应的路径下。点这里下载 msql-5.5.8-path.tar.tar(在附件中)
Starting MySQL.Manager of pid-file quit without updating file.[FAILED]
今天在centos5.2 64位机器上安装mysql-5.1.32-linux-x86_64-icc-glibc23.tar.gz,启动服务出现报错:
Starting MySQL.Manager of pid-file quit without updating file.[FAILED]
平时装MYSQL都还没有出过什么问题,于是马上认真检查了步骤,没有什么问题。只好网上求助了。得到以下方法:
1.注释掉 skip-federated,按此方法操作,无果。
2.关闭selinux,已经关闭了,所以排除。
查看mysql日志,发现错误:
/usr/local/mysql/bin/mysqld: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
090320 00:59:22 mysqld_safe mysqld from pid file /var/log/mysql/mysql.pid ended
090320 01:17:29 mysqld_safe Starting mysqld daemon with databases from /mysql_data/
可以看出缺少库文件 libstdc++.so.5。
到官方下载:wget http://mirror.centos.org/centos/5.2/os/x86_64/CentOS/compat-libstdc++-33-3.2.3-61.x86_64.rpm
安装:
rpm -ivh compat-libstdc++-33-3.2.3-61.x86_64.rpm
再重新启动MYSQL服务,启动OK.
安装mysql 版本: mysql-5.1.41-linux-i686-icc-glibc23.tar.gz
第一步:
mysql5.1.30 初次启动会出现Manager of pid-file quit without updating fi[FAILED]的报错,需要注释/etc/my.cnf里的skip-federated注释掉即#skip-federated就OK了!
但还不好用。错误依旧。
第二步:
杀掉已经启动的进程
CODE:
[root@localhost mysql]# ps -A|grep mysql
8016 pts/2 00:00:00 mysqld_safe
8037 pts/2 00:00:00 mysqld
果然有两个顽固分子
杀之!!!
kill -9 8037(杀掉这个8016那个就自动被杀了!)
kill -9 8016
开心的时刻终于到来了
CODE:
[root@localhost mysql]# /etc/init.d/mysql restart
MySQL manager or server PID file could not be found! [FAILED]
Starting MySQL [ OK ]
=>mysql数据库中文乱码解决 :
1. 乱码分析
----从终端shell进入mysql
shell:~$ mysql
............
............
mysql> show variables like '%character%'
----得到以下数据库编码信息表:
+----------------------------------- +-------------------------------------------+
| Variable_name | Value |
+------------------------------------+-------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+------------------------------------ +-------------------------------------------+
可以看出character_set_database ,character_set_server 的编码还是默认的latin1。
不知道为什么,之前DEFAULT_CHARSET设置成为utf8的,好像没起作用。查看官方文档
发现,character_set_database不支持配置文件(/etc/my.cnf)变量设置,
但是character_set_server 支持配置文件变量设置。
2. 解决办法
----打开配置文件
shell:~$ sudo gedit /etc/my.cnf
然后在[mysqld]配置选项下添加
character_set_server = utf8
----然后进入mysql
执行:
mysql> show variables like '%character%'
结果:character_set_database ,character_set_server两项都变为utf8了
----测试:
往数据库表中插入中文字段,中文就正常显示了。