专栏首页运维之美轻松玩转 MySQL 8.0 源码编译

轻松玩转 MySQL 8.0 源码编译

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

编译安装 MySQL 8.0 前,需要先安装 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,所以需要自行下载安装。

需要下载 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 . \
-DOWNLOAD_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 等着顺利编译安装即可。

附录:在 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

来源:老叶茶馆 原文:http://t.cn/EKGDRp9 题图:来自谷歌图片搜索 版权:本文版权归原作者所有 投稿:欢迎投稿,投稿邮箱: editor@hi-linux.com

本文分享自微信公众号 - 运维之美(Hi-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 什么是雪花模型

    版权声明:本文为王小雷原创文章,未经博主允许不得转载 https://blog.csdn.n...

    王小雷
  • 故障分析|浅谈ERROR 1872与5.6/5.7 MTS group recovery

    背景和相关配置如下: 结构:简单的master -> slave 复制方式:auto_position=0 (file position based repli...

    [3306 Pai ] 社区
  • R语言数据集合并、数据增减、不等长合并

    1、merge(a,b),纯粹地把两个数据集合在一起,没有沟通a、b数据集的by,这样出现的数据很多,相当于a*b条数据;

    素质
  • MySQL中的并发控制概览

    毫无疑问,并发控制方向的内容是我们学习的重点和难点,在一段时间的学习之后,通常会有一些挫败感,这是一种似懂非懂的感觉,主要的原因其实细究起来理解为:使用并发时需...

    jeanron100
  • MyBatis-3.动态SQL

    where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会...

    悠扬前奏
  • PDO扩展PDO::ATTR_AUTOCOMMIT 出坑记

    我自己以swoole扩展为基础,封装了一个异步任务服务器框架,数据库操作使用pdo扩展,但是在插入数据的时候,出现了异常情况,具体状况如下:

    luxixing
  • 新特性解读 | MySQL 8.0 索引特性2-索引跳跃扫描

    MySQL 8.0 实现了Index skip scan,翻译过来就是索引跳跃扫描。熟悉ORACLE的朋友是不是发现越来越像ORACLE了?再者,熟悉MySQL...

    [3306 Pai ] 社区
  • Windows 下配置 MariaDB/Mysql 的远程连接

    在数据库安装目录下的bin文件夹cmd命令端,mysql -u root -p 密码(如果有),然后接下来····

    北漂的我
  • 亿级数据DB秒级平滑扩容

    数据库上层都有一个微服务,服务层记录“业务库”与“数据库实例配置”的映射关系,通过数据库连接池向数据库路由sql语句。

    java架构师
  • 微服务架构之「 监控系统 」

    在微服务架构的系列文章中,前面已经通过文章分别介绍过了微服务的「服务注册 」、「服务网关 」、「配置中心 」,今天这篇文章我们继续来聊一聊另外一个重要模块:「 ...

    奎哥

扫码关注云+社区

领取腾讯云代金券