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
—-报错信息
——————www.linuxidc.com—————
— 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)
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执行:
———————————
shell:~$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/home/system_username/Programming/mysql/mysqldata
-DSYSCONFDIR=/etc
-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
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock
-DMYSQL_TCP_PORT=3306
-DENABLED_LOCAL_INFILE=1
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8-general_ci
-DMYSQL_USER=mysql
注:没有换行。官方文档上,cmake 命令后面加个点不懂什么意思。在这里加上命令执行不了
———————————
源代码配置选项说明:
//mysql安装的主目录,5.5.8版本默认为/usr/local/mysql,所以可以不添加
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
//mysql数据保存的路径,自定义
-DMYSQL_DATADIR=/home/system_username/mysql/mysqldata
//mysql配置文件地址——The default my.cnf option file directory
-DSYSCONFDIR=/etc
//Compile storage engine xxx statically into server
/*Storage engines are built as plugins. You can build a plugin as a static module (compiled into the server)
*or a dynamic module (built as a dynamic library that must be installed into the server using the INSTALL
*PLUGIN statement or the –plugin-load option before it can be used). Some plugins might not support static
*or dynamic building.
*/
-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
//Unix socket file
/*
*The Unix socket file path on which the server listens for socket connections. This must be an absolute path
*name. The default is /tmp/mysql.sock
*/
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock
//数据库服务器TCP/IP连接的监听端口,默认为3306
-DMYSQL_TCP_PORT=3306
//Whether to enable LOCAL capability in the client library for LOAD DATA INFILE
//默认为关闭,这里开启
-DENABLED_LOCAL_INFILE=1
//数据库编码设置
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8-general_ci
— Configuring incomplete, errors occurred!
3.编译和安装
—-shell定位到源代码文件夹目录
—-执行:(编译用了大概20分钟)
shell:~$ make
shell:~$ make install
4.后续配置
—-进入mysql安装目录下的脚本目录
shell:~$ cd /usr/local/mysql/scripts
—-利用mysql_install_db脚本生成新的MySQL 授权表
./mysql_install_db –basedir=/usr/local/mysql –datadir=/home/system_username/Programming/mysql/mysqldata
–user=mysql
—-进入mysql安装目录下的支持文件目录
shell:~$ cd /usr/local/mysql/support-files
—-复制mysql配置文件
shell:~$ sudo cp my-medium.cnf /etc/my.cnf
—-复制服务文件并修改
shell:~$ sudo cp mysql.server mysqld
—-修改mysqld
basedir=/usr/local/mysql
datadir=/home/mysql
mv mysqld /etc/init.d/mysqld
—-启动服务
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这三个命令能在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 后,数据库服务就启动正常了
=>结束
MYSQL 编译configure向cmake过渡指南
网址:http://forge.mysql.com/wiki/Autotools_to_CMake_Transition_Guide
从mysql5.5起,mysql源码安装开始使用cmake了。下面是介绍configure选项如何映射到CMake的等值参数。
1. 命令语法:
configure command | cmake command |
./configure | cmake . |
./configure –help | cmake . -LH or ccmake . |
重新编译时,需要清除旧的对象文件和缓存信息
# make clean
# rm -f CMakeCache.txt
2.安装选项
parameter | configure option | cmake option |
Install base dir | –prefix=/usr/local/mysql | -DCMAKE_INSTALL_PREFIX=/usr/local/mysql |
Mysqld dir | –libexecdir=/usr/local/mysql/sbin | -DINSTALL_SBINDIR=sbin |
Data dir | –datadir=/mydata | -DMYSQL_DATADIR=/mydata |
Config dir | –sysconfdir=/etc/mysql | -DSYSCONFDIR=/etc/mysql |
Plugin dir | –with-plugindir=/usr/local/mysql/lib/mysql/plugin | -DINSTALL_PLUGINDIR=lib/mysql/plugin |
Manpage dir | –mandir=/usr/local/mysql/share/man | -DINSTALL_MANDIR=share/man |
Shared-data dir | –sharedstaedir=/usr/local/mysql/share/mysql | -DINSTALL_SHAREDIR=share |
Library install dir | –libdir=/usr/local/mysql/lib/mysql | -DINSTALL_LIBDIR=lib/mysql |
Header install dir | –includedir=/usr/local/mysql/include/mysql | -DINSTALL_INCLUDEDIR=include/mysql |
Info doc dir | –infodir=/usr/local/mysql/share/info | -DINSTALL_INFODIR=share/info |
CMAKE_INSTALL_PREFIX值是安装的基本目录,其他cmake选项值是不包括前缀,是相对路径名,绝对路径包括CMAKE_INSTALL_PREFIX路径。如-DINSTALL_SBINDIR=sbin的绝对路径是/usr/local/mysql/sbin
3.存储引擎选项
mysql存储引擎是插件式的,因此插件控制选项可以指定那个存储引擎安装。
configure编译插件选项–with-plugins=csv,myisam,myisammrg,heap,innobase,
archive,blackhole在cmake中没有直接对应的相同选项。对于csv,myisam,myisammrg,heap在cmake中是不需要明确指定存储引擎的名称,因为它们是强制性安装。
可以使用以下选择来安装innodb,archive,blackhole存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
(1可以使用on代替)
如果既不是-DWITH_<ENGINE>_STORAGE_ENGINE 也不是 -DWITHOUT_<ENGINE>_STORAGE_ENGINE来指定存储引擎,该存储引擎将安装成共享模块式的。如果不是共享模块式的将排除在外。共享模块安装时必须使用INSTALL PLUGIN语句或–plugin-load才可以使用。
4.lib库选项
parameter | configure option | cmake option |
readline library | –with-readline | -DWITH_READLINE=1 |
SSL library | –with-ssl=/usr | -DWITH_SSL=system |
zlib library | –with-zlib-dir/usr | -DWITH_ZLIB=system |
Libwrap library | –without-libwrap | -DWITH_LIBWRAP=0 |
有关插件的CMake的选项的其他信息,请查阅:
http://forge.mysql.com/wiki/MySQL_Internals_Support_for_Plug-Ins
5.其他选项
之前MySQL的编译选项大多数都支持。新旧版本之间的安装选项映射成大写字母,删除选项前面破折号,中间字符间的破折号替换成下划线。如:
–with-debug => WITH_DEBUG=1
–with-embedded-server => WITH_EMBEDDED_SERVER
Parameter |
configure Option |
CMake Option |
CMake Notes |
TCP/IP port number |
–with-tcp-port-=3306 |
-DMYSQL_TCP_PORT=3306 |
|
UNIX socket file |
–with-unix-socket-path=/tmp/mysqld.sock |
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock |
|
Enable LOCAL for LOAD DATA |
–enable-local-infile |
-DENABLED_LOCAL_INFILE=1 |
|
Extra charsets |
–with-extra-charsets=all |
-DEXTRA_CHARSETS=all |
default is “all” |
Default charset |
–with-charset=utf8 |
-DDEFAULT_CHARSET=utf8 |
|
Default collation |
–with-collation=utf8_general_ci |
-DDEFAULT_COLLATION=utf8_general_ci |
|
Build the server |
–with-server |
none |
|
Build the embedded server |
–with-embedded-server |
-DWITH_EMBEDDED_SERVER=1 |
|
libmysqld privilege control |
–with-embedded-privilege-control |
none |
always enabled? |
Install the documentation |
–without-docs |
none |
|
Big tables |
–with-big-tables, –without-big-tables |
none |
tables are big by default |
mysqld user |
–with-mysqld-user=mysql |
-DMYSQL_USER=mysql |
mysql is the default |
Debugging |
–without-debug |
-DWITH_DEBUG=0 |
default is debugging disabled |
GIS support |
–with-geometry |
none |
always enabled? |
Community features |
–enable-community-features |
none |
always enabled |
Profiling |
–disable-profiling |
-DENABLE_PROFILING=0 |
enabled by default |
pstack |
–without-pstack |
none |
pstack is removed |
Assembler string functions |
–enable-assembler |
none |
|
Build type |
–build=x86_64-pc-linux-gnu |
no equivalent |
unneeded? |
Cross-compile host |
–host=x86_64-pc-linux-gnu |
no equivalent |
unneeded? |
Client flag |
–with-client-ldflags=-lstdc++ |
none |
unneeded |
Client flag |
–enable-thread-safe-client |
none |
unneeded, clients are always thread safe |
Comment |
–with-comment=’string’ |
-DWITH_COMMENT=’string’ |
|
Shared/static binaries |
–enable-shared –enable-static |
none |
there is only DISABLE_SHARED |
Memory use |
–with-low-memory |
none |
unneeded |
-DCMAKE_BUILD_TYPE表示生成库的方式,它有以下几种选项:
1. RelWithDebInfo 带调试信息,开启编译优化的库,编译参数为-O2 -g
2. Debug 带调试信息,不做任何编译优化的库,编译参数-g
3. Release 不带调试信息,编译优化的库,编译参数-O2
4. MinSizeRel 不带调试信息,最小size的库,编译参数-Os
6.调试配置过程
使用configure编译完将生成config.log和config.status文件。
使用cmake编译完在CMakeFiles目录下生成CMakeError.log 和CMakeOutput.log文件。
7.第三方接口工具
在之前的版本,第三方工具从MySQL顶层源目录中读取源configure.in文件来确定mysql版本。如:对5.5.7 – RC版本的AC_INIT线看起来像这样:
AC_INIT([MySQL Server], [5.5.7-rc], [], [mysql])
现在的版本可以直接读取版本文件。如:如果版本是5.5.8,文件看起来像这样的:
MYSQL_VERSION_MAJOR=5
MYSQL_VERSION_MINOR=5
MYSQL_VERSION_PATCH=8
MYSQL_VERSION_EXTRA=
如果源码包不是GA版,MYSQL_VERSION_EXTRA的值将非空。如:对于一个发布RC版本是这样的:
MYSQL_VERSION_EXTRA=rc
构建5位数字的版本号,使用下面公式:
MYSQL_VERSION_MAJOR*10000 + MYSQL_VERSION_MINOR*100 + MYSQL_VERSION_PATCH
- 本文固定链接: http://www.wy182000.com/2012/10/19/linux-下-mysql-5-5-8-源码编译安装记录/
- 转载请注明: wy182000 于 Studio 发表