玩转MySQL 8.0源码编译compile

导读

最近十年来又一次玩玩MySQL源码编译安装,挺D疼的。

这阵子结课了,闲来无事就继续折腾之前记录的一些TODO,其中一个是令人D疼的MySQL源码编译

此前我最后一次编译MySQL源码大概10年前了,再后来有人问我怎么编译源码安装,我一般都是建议直接下载二进制包安装,其实真挺方便点的,性能上的损失也是微乎其微。

编译安装MySQL前,需要先安装boost,因此有两种不同的安装方案。

提示下,编译MySQL 8.0版本,需要gcc版本5.3.0以上才行。我这次的编译环境是CentOS 7.5,其gcc版本是4.8.5,因此我在后面附上安装新版本gcc的方法,并且在编译参数中特别指定了新版本的绝对路径(这里有个小插曲,一开始我设置了环境变量,不行;修改Makefile参数,也不行;后来把新版本gcc做个软链接就行了。最后在重庆八怪的提醒下,才知道原来还可以在编译参数里设置绝对路径)。

先说第一种,自带boost的源码编译
首先,下载带boost代码的MySQL源码包,在官网下载页面有相应的提示:

解压缩后,就可以开始编译了。首先,指定编译的选项:

[root@yejr.me]# cd /opt/src/mysql-8.0.15/ cmake . \ -DWITH_BOOST=/opt/mysql-8.0.15/boost/ \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.0.15 \ -DMYSQL_DATADIR=/data/mysql \ -DWITHOUT_CSV_STORAGE_ENGINE=1 \ -DWITHOUT_BLACKHOLD_STORAGE_ENGINE=1 \ -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \ -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 \ -DWITHOUT_MRG_MYISAM_STORAGE_ENGINE=1 \ -DWITHOUT_NDBCLUSTER_STORAGE_ENGINE=1 \ -DFORCE_INSOURCE_BUILD=1 \ -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ \ -DCMAKE_C_COMPILER=/usr/local/bin/gcc

 

在上面的参数中,我把不常用的引擎直接给禁用了,读者们若有需要个别引擎可自行删除对应选项即可。而DEBUG、SSL等几个选项则建议不要禁用。

为了好玩,也为了应对某些流氓安全扫描工具(你们懂得的^@@^),我特地把MySQL版本号修改掉,只需修改 mysql_version.h 文件即可,例如:

[root@yejr.me]# vim include/mysql_version.h … #define MYSQL_SERVER_VERSION “3306.0.15” #define MYSQL_BASE_VERSION “mysqld-3306.0” #define MYSQL_SERVER_SUFFIX_DEF “” #define MYSQL_VERSION_ID 33060015 #define LIBMYSQL_VERSION “3306.0.15” #define LIBMYSQL_VERSION_ID 33060015 …

 

接下来就是执行 make && make install ,顺利的话就完成编译并安装了。如果编译错误,则删除CMakeCache.txt文件后解决对应错误,重新编译即可。

编译完后看到的MySQL版本号就是这样的了:

[root@yejr.me]# /usr/local/mysql/bin/mysqld –verbose -V /usr/local/mysql/bin/mysqld Ver 3306.0.15 for Linux on x86_64 (Source distribution)

 

有没有感觉有点酷酷的,嘿。

再说第二种,自行安装boost后再编译
这种方式实在费劲,强烈不推荐。

可以采用YUM/RPM包方式安装boost,也可以自己下载源码包编译安装,或在编译MySQL时指定参数自行下载编译(建议用这个方法)。

下面演示的版本是Percona Server 8.0.15,要求boost版本是1.68.0以上,而CentOS 7.5安装的boost版本是1.53.0,所以需要自行下载安装。

P.S,需要下载PRM包的话,可以在这里搜索相应版本下载

https://www.rpmfind.net/linux/rpm2html/search.php

如果没找到合适的版本,可以在下面这个地址下载 boost-1.69.0 版本源码包。

https://sourceforge.net/projects/boost/

下载后,执行编译并安装即可。

[root@yejr.me]# ./bootstrap.sh –prefix=/usr/local/boost [root@yejr.me]# ./b2 install

 

安装完boost后,再开始编译MySQL。

另外,上面有提到过,如果不想事先手动安装boost,可以增加一个 DOWNLOAD_BOOST 参数,就像下面这样:

[root@yejr.me]# cd /opt/src/percona-server-8.0.15-5 cmake . \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=/opt/src/percona-8.0.15-5/boost \ -DCMAKE_INSTALL_PREFIX=/usr/local/percona-8.0.15-5 \ -DMYSQL_DATADIR=/data/mysql \ -DWITHOUT_CSV_STORAGE_ENGINE=1 \ -DWITHOUT_BLACKHOLD_STORAGE_ENGINE=1 \ -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \ -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 \ -DWITHOUT_MRG_MYISAM_STORAGE_ENGINE=1 \ -DWITHOUT_NDBCLUSTER_STORAGE_ENGINE=1 \ -DWITHOUT_TOKUDB_STORAGE_ENGINE=1 \ -DWITHOUT_TOKUDB=1 \ -DWITHOUT_ROCKSDB_STORAGE_ENGINE=1 \ -DWITHOUT_ROCKSDB=1 \ -DFORCE_INSOURCE_BUILD=1 \ -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ \ -DCMAKE_C_COMPILER=/usr/local/bin/gcc

 

后面同样是执行 make && make install 等着顺利编译安装即可。

enjoy mysql 8.0。

附录:在CentOS 7.5下安装gcc 5.5.0

安装官方MySQL 8.0需要用gcc 5.3.0以上版本,所以需要先安装高版本gcc,我这里选择的是gcc-5.5.0。

在这里下载:

http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/

解压缩后,执行下面的命令,下载其他依赖包:

[root@yejr.me]# cd gcc-5.5.0 #下载mpfr、gmp、mpc、isl等依赖包 [root@yejr.me]# ./contrib/download_prerequisites #开始编译gcc [root@yejr.me]# mkdir build && cd build [root@yejr.me]# ../configure –enable-checking=release \ –enable-languages=c,c++ –disable-multilib [root@yejr.me]# make && make install

 

看起来其实挺简单的对不对 🙂

参考

  • 2.9.4 MySQL Source-Configuration Options,https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html
  • Installing Percona Server for MySQL 8.0.15-5,https://www.percona.com/doc/percona-server/5.7/installation.html
  • Centos7升级gcc学习笔记 https://www.cnblogs.com/highway-9/p/5628852.html

转载请注明出处:https://www.onexin.net/mysql-8-compile/

相关文章:

1、常用MySQL,PostgreSQL, CUBRID和MongoDB开源数据库利弊对比
https://www.onexin.net/mysql-postgresql-cubrid-mongodb/

2、Discuz!Q 小内存服务器上宝塔默认安装的 MySQL 如何配置?
https://www.onexin.net/discuzq-mysql/

3、创建 PDO 实例请求连接SQL数据库
https://www.onexin.net/pdo-database/

4、PDO数据抽象简介及MySQL,PostgreSQL,ODBC,Oracle应用
https://www.onexin.net/pdo-data-abstraction-introduction-and-mysql-postgresql-odbc-oracle-applications/

5、常用MySQL的命令集锦
https://www.onexin.net/used-the-mysql-command-collection/

Leave a Reply