时间:2011-01-10
参考:http://blog.csdn.net/xqandpan/archive/2011/01/05/6118443.aspx
系统:ubuntu10.10
mysql源码文件:mysql-5.5.8.tar.gz
安装所需工具:cmake, GNU make, gcc, Perl, libncurses5-dev, bison(可选), chkconfig
注: 1.官方2010-11-18的源码有几处bug,在编译之前参照官方的说明,进行了手动修改。
官方说明链接:http://lists.mysql.com/commits/126782
2.官方5.5版本参考手册:http://dev.mysql.com/doc/
汗了一下,3392页的参考手册!
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
=>工具安装:
-----------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. cmake
----没有自己编译安装cmake
shell:~$ sudo apt-get install cmake
----版本:2.8.2
2. GNU make
----ubuntu自带
----版本:3.81
3.GCC
----ubuntu自带
----版本:4.4.5(官方文档:必须3.2以上)
4.Perl
----ubuntu自带
----版本:5.10.1
5.libncurses5-dev (ncurses-devel)
----若差了这个包,在cmake的时候会报错。
----Debian/Ubuntu上的包名是libncurses5-dev,Redhat和其他版本对应的是ncurses-devel
shell:~$ sudo apt-get install libncurses5-dev
----报错信息
----------------------------------------------------------------------
-- MySQL 5.5.8
-- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:82 (MESSAGE):
Curses library not found. Please install appropriate package,
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu , package name is libncurses5-dev ,
on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readline.cmake:126 (FIND_CURSES)
cmake/readline.cmake:216 (MYSQL_USE_BUNDLED_LIBEDIT)
CMakeLists.txt:256 (MYSQL_CHECK_READLINE)
-- Configuring incomplete, errors occurred!
----------------------------------------------------------------------
6. bison
shell:~$ sudo apt-get install bison
----可选。没有这个工具,在make的时候报出警告。
----警告记录:
----------------------------------------------------------------------
Warning: Bison executables not found in PATH
----------------------------------------------------------------------
7.chkconfig
----后面配置mysql服务自启动的时候需要。
shell:~$ sudo apt-get install chkconfig
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
=>mysql安装: --------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.解压源代码文件
----shell定位到源代码文件所在目录
----解压
shell:~$ tar zxvf mysql-5.5.8.tar.gz
2.cmake操作
----shell定位到解压出的源代码文件夹目录(文件夹:mysql-5.5.8)
----cmake执行:(假定我的系统用户名为:sky )
----------------------------------------------------------------------------------------------------------------------------
shell:~$ cmake -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8-general_ci -DMYSQL_DATADIR=/home/sky/mysql/mysqldata -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1
----------------------------------------------------------------------------------------------------------------------------
额外说明:(以下配置参数在5.5.8版本中都是以一下为默认值,所以cmake时不必自行添加)
-DEXTRA_CHARSETS=all
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DSYSCONFDIR=/etc
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock
-DMYSQL_TCP_PORT=3306
源代码配置选项说明:(-D 是cmake命令的一个参数,后面跟一个键值对来生成一个配置参数)
//mysql安装的主目录 ,5.5.8版本默认为/usr/local/mysql,所以可以不添加
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
//mysql数据保存(数据库,表,错误日志等等)的路径,自定义
-DMYSQL_DATADIR=/home/sky/mysql/mysqldata
//mysql配置文件 my.cnf的地址
-DSYSCONFDIR=/etc
//下面是开启额外数据库引擎的配置,要开启必须如下手动配置
//MyISAM, MERGE, MEMORY, and CSV引擎是默认安装的
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
//下面这个参数是开启本地文件数据库导入
//解释:比如可以建立一个文本文件,在里面按照一定格式写入一个表的n条记录,
// 就可以用专门的命令从这个文本文件把数据导入到一个数据库表中。
-DENABLED_LOCAL_INFILE=1
//Unix socket file
//Unix套接字文件 地址。
/**
*解释:1.从本地客户端登入数据库的时候默认是按Unix套接字进行连接的。即如下情形:
* shell:~$ mysql -uroot -padmin
* 此种情况,mysql服务器认为客户端是来源于本地的,即root@localhost
* 2. 另一种是利用TCP/IP协议进行连接。即如下情形:
* shell:~$ mysql -h127.0.0.1 -uroot -padmin
* 此中情形,mysql服务器认为客户端,不是来源于本地,所以按TCP/IP连接,即root@127.0.0.1
* 但是127.0.0.1恰好是一个本地回环IP。
* 更广的情形是客户端账户不是在本地登录的,客户端链接服务端的时候即:root@server_ip
* 但是一般处于安全考虑,服务器端不应该赋予root帐号在外部连接服务器的权利。
* 一般是为不能在本地进行登录的用户建立一个有限权限的账户来进行这种外部登录。
*/
//补充:此套接字文件只有在mysql server服务启动时临时创建。服务关闭时,自动清除。
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock
//数据库服务器TCP/IP连接的监听端口 ,默认为3306
-DMYSQL_TCP_PORT=3306
//数据库编码 设置
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8-general_ci
3.编译和安装
----shell定位到源代码文件夹目录
----执行:(编译用了大概20分钟)
shell:~$ make shell:~$ sudo make install
注意 :make install 必须加root权限sudo。 因为默认安装在/usr/local/mysql目录下,
而在此目录下进行文件读写是需要root权限的。
4.后续配置
----生成新的MySQL 授权表
----进入mysql安装目录下的脚本目录
shell:~$ cd /usr/local/mysql/scripts
----利用mysql_install_db脚本生成新的MySQL 授权表
./mysql_install_db --basedir=/usr/local/mysql --datadir=/home/sky/mysql/mysqldata --user=sky
注意 : --basedir=/usr/local/mysql --datadir=/home/system_username/Programming/mysql/mysqldata
这两个参数是必须的。因为mysql_install_db要利用basedir在datadir下建立授权表。
----配置文件my.cnf设置
----进入mysql安装目录下的支持文件目录
shell:~$ cd /usr/local/mysql/support-files
----复制mysql配置文件
shell:~$ sudo cp my-medium.cnf /etc/my.cnf
----mysql server在系统中的服务项设置
----复制服务文件并修改
shell:~$ sudo cp mysql.server mysqld
----修改mysqld
basedir=/usr/local/mysql datadir=/home/sky/mysql/mysqldata
shell:~$ mv mysqld /etc/init.d/mysqld
解释: linux的/etc/init.d/目录下存放的是系统的各种服务文件,可以对其设置达到开机服务自启动。
----启动服务
shell:~$ service mysqld start
----关闭服务
shell:~$ service mysqld stop
----------------------------------------------------------------------------------------------
service命令:
1. 用于管理Linux系统中服务的命令
2. 作用是去/etc/init.d目录下寻找相应的服务,进行开启和关闭等操作
3. 上述操作后,mysqld服务文件对应mysql.server文件
----------------------------------------------------------------------------------------------
----添加服务到自启动项
shell:~$ sudo chkconfig --level 3 mysqld on
----设置软连接使mysql, mysqldump, mysqladmin这三个bin命令能在shell中直接运行
shell:~$ sudo ln -s /usr/local/mysql/bin/mysql /usr/bin shell:~$ sudo ln -s /usr/local/mysql/bin/mysqldump /usr/bin shell:~$ sudo ln -s /usr/local/mysql/bin/mysqladmin /usr/bin
------------------------------------------------------------------------------------------------------------------------------------------------------------------
=>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了
----测试:
往数据库表中插入中文字段,中文就正常显示了。
注:1.用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 后,数据库服务就启动正常了
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
=>结束 --------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------