在CentOS6.4下编译MySQL5.6.16版本,直接编译MySQL源代码会出现一些问题,因此在这里备忘一下编译方法及修改事项。MySQL的编译过程如下:
$ sed -i "/ADD_SUBDIRECTORY(sql\/share)/d" CMakeLists.txt &&
$ sed -i "s/ADD_SUBDIRECTORY(libmysql)/&\\nADD_SUBDIRECTORY(sql\/share)/" CMakeLists.txt &&
$ sed -i "s@data/test@\${INSTALL_MYSQLSHAREDIR}@g" sql/CMakeLists.txt &&
$ sed -i "s@data/mysql@\${INSTALL_MYSQLTESTDIR}@g" sql/CMakeLists.txt &&
$ sed -i "s/srv_buf_size/srv_sort_buf_size/" storage/innobase/row/row0log.cc &&
$ mkdir build &&
$ cd build &&
$ cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.16 \
-DINSTALL_MYSQLDATADIR=/srv/mysql \
-DINSTALL_SQLBENCHDIR=share/mysql/bench \
-DINSTALL_SUPPORTFILESDIR=share/mysql \
-DMYSQL_DATADIR=/srv/mysql \
-DSYSCONFDIR=/etc/mysql \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=OFF \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_LIBEVENT=system \
-DWITH_SSL=system \
.. &&
make
TIPS:如果你对参数的设置不是很清楚,可以参看MySQL的官方文档: MySQL Source-Configuration Options
要是你能顺利完成编译,那恭喜。
Mitchell前后编译安装前后做过的修改和操作如下:
- 修改: ./cmake/ssl.cmake 237:55
在"${WITH_SSL_DOC}的错误,修改成" ${WITH_SSL_DOC}
注意:双引号后面需要加个空格
- 修改./CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
# Avoid warnings in higher versions
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 2.6)
CMAKE_POLICY(VERSION 2.8)
# Added by MitchellChu to dispose CMP0022 CMake Waning.
# 这里检验cmake版本是否大于2.8.11,如果大于,把CMP002策略设置为OLD
IF("${CMAKE_VERSION}" VERSION_GREATER "2.8.11")
CMAKE_POLICY(SET CMP0022 OLD)
ENDIF()
endif()
- 安装完毕添加my.cnf
# install -v -dm 755 /etc/mysql &&
cat > /etc/mysql/my.cnf <<"EOF"
###这里是你的cnf配置文件内容
EOF
- 初始化Mysql实例数据
# /usr/local/mysql5.6.16/scripts/mysql_install_db --basedir=/usr/local/mysql5.6.16 --datadir=/srv/mysql/data --user=mysql&&
chown -R mysql:srvuser /srv/mysql/data
- MYSQL_UNIX_ADDR为默认的/tmp/mysqld.sock,还要配置下运行时的mysqld.sock和mysql.sock
# install -v -o mysql -g srvuser -d /var/run/mysqld &&
# install -v -o mysql -g srvuser -d /var/lib/mysql
## 网上说法是要touch pid文件
# touch /var/run/mysqld/mysqld.pid
## 其实不必,如果my.cnf设置pid-file则需要对应的路径下有权限,如果没有设置,默认在datadir下,pid文件名为:hostname.pid, (hostname为运行系统的名称)
## 建立mysql client的socket,编译默认在/tmp/mysql.sock,而系统mysqld默认是在/var/run/mysqld/下面建立mysqld.sock的(可在my.cnf中配置)
# ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
## 如果是在my.cnf中配置了client 和mysqld的 socket,直接指向同一个mysqld.sock的话(比如指向/tmp/mysqld.sock),则可以不必在建立连接。
- 配置好了之后,可以测试启动,使用mysqld_safe启动.
# ./mysqld_safe --user=mysql >/dev/null 2>&1 &
- 如果正常,则可以使用 mysqladmin设置一个本地密码:
# ./mysqladmin -u root password <your-password-here>
- 而后,关闭mysql,进行后继配置
- 配置服务,其实很简单,找到文件mysql.server,并拷贝到/etc/init.d/下即可
# cp /usr/local/mysql5.6.16/share/mysql/mysql.server /etc/init.d/mysql.server
## 如果你对启动项有修改,可以在这里面修改,比如我的datadir编译和初始化的时候不同,则可以在此修改datadir的值
## 完成这步之后,你可以使用:
## 启动mysql
# service mysql.server start
## 停止mysql
# service mysql.server stop
## 重启mysql
# service mysql.server restart
- 设置启动运行和关机自动关闭mysql
## 这个仅需要建立两个连接即可,开机运行:
# ln -s /etc/init.d/mysql.server /etc/rc3.d/S99mysql
# ln -s /etc/init.d/mysql.server /etc/rc0.d/K01mysql
配置MySQL完毕之后,启动MySQL服务,此时已经完成MySQL的编译安装的所有工作,接下来要做的是,使用root登录MySQL创建你需要的用户和库(表)。
注意:
$,#是终端提示符,##是注释
本文仅是Mitchell本人在CentOS(Linux)下编译安装MySQL5.6.16时的个人备忘,参考是可以,权威是没有的。