最新
版本
手把手教你编译安装 MySQL8.0.22
2020 年 10 月 19 日,MySQL 的最新版本 8.0.22 正式发行,为了庆祝于是有了这篇文章。
前言
一般来说,我们生产环境的 MySQL 是安装在 RHEL/CentOS 7 下的,常见安装部署的方法有三种:
yum/rpm 安装
二进制 安装
源码 安装
生产环境建议使用二进制安装法,其优点是部署简单、快速、方便,并且相对"yum/rpm 安装" 方法能更方便地自定义文件存放的目录结构,方便用脚本批量部署,方便日后运维管理。
在生产上很少用到源码编译安装 MySQL, 最主要的原因,就是编译安装太慢了,二进制部署只需要几十秒。并且,源码编译安装容易遇到一些不好解决的编译问题。
那么什么时候需要用到编译安装呢?
当我们需要修改 MySQL 源代码以修复功能、修改功能、新增功能时,当我们想修改 MySQL 默认设定时,当我们需要对 MySQL 做 debug 时,我们就需要用到编译安装。
改源码
改默认设定
debug
话不多说,下面看看我们的实战步骤,如何编译安装 MySQL 的最新版本。
编译安装 MySQL8.0.22
01
我们的目标
1. 通过实验,在 CentOS 7.5 (minimal 安装版) 操作系统下,编译安装 MySQL 社区版的最新版本 8.0.22
2. 修改源代码,实现一个假的 MySQL 版本号。
3. 通过修改默认设定,禁用不常用的两个存储引擎,FEDERATED 和 ARCHIVE;修改默认设定,使默认读的是 my.cnf,取代 etc/my.cnf
4. 让 MySQL 可以 debug。
02
环境准备——编译的先决条件
由于 MySQL Server 是 C/C++ 开发的,所以编译安装需要先安装 cmake 和 gcc 等编译工具,构造编译环境。
https://dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html
参考官方文档,经过测试,编译工具有以下版本要求:
(系统使用的是 CentOS 7.5 minimal 安装版)

命令行
# 安装 cmakecd ~yum -y install wgetwget https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.tar.gztar zxvf cmake-3.8.2-Linux-x86_64.tar.gzmv cmake-3.8.2-Linux-x86_64 usr/local/cmakeecho -e "\nexport PATH=/usr/local/cmake/bin:\$PATH" >>/etc/profilesource /etc/profile# 安装gcc## 安装编译安装时需要用的工具包yum -y install bzip2 gcc gcc-c++wget http://mirror.hust.edu.cn/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.gztar zxvf gcc-5.5.0.tar.gzcd gcc-5.5.0## 下载mpfr、gmp、mpc、isl等依赖包./contrib/download_prerequisites## 开始编译安装 gccmkdir build && cd build../configure --prefix=/usr/ --enable-checking=release \--enable-languages=c,c++ --disable-multilibmake -j4 && make install## 注意了,上面那个 prefix 必须用 usr/,以便覆盖掉旧版的 gcc ,以免编译程序找不到新版 gcc## 检查验证 gcc 版本gcc -v# 安装 ncurses-devel、bison、openssl-develyum -y install ncurses-devel bison openssl-devel
03
下载源代码
打开 http://mysql.com/downloads/下载页面
找到 MySQL Community(GPL)Downloads

还是找到 MySQL Communtiy Server

放心,这个页面的版本,就是 MySQL 的最新版本,选择 "Source Code" 下载源码,再选择 Generic Linux (Architecture Independent), 下载选择 "Compressed TAR Archive, Includes Boost Headers"。

在这里,你可以选择下载,或者右键 "复制链接地址"。(我选择的是后者)

到 Linux 上,下载
cd ~wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.22.tar.gz
04
编译安装
tar zxvf mysql-boost-8.0.22.tar.gzcd mysql-8.0.22# 修改版本号vi MYSQL_VERSION# 修改为以下内容MYSQL_VERSION_MAJOR=100MYSQL_VERSION_MINOR=9MYSQL_VERSION_PATCH=99MYSQL_VERSION_EXTRA=# cmakecmake . \-DWITH_BOOST=./boost/ \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/data/mysql/mysql3306/data \-DSYSCONFDIR=/ \-DWITH_DEBUG=1 \-DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \-DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 \-DFORCE_INSOURCE_BUILD=1## SYSCONFDIR=/ # 修改读取 my.cnf 的路径## WITH_DEBUG=1 # 可 debug 的版本## WITHOUT_FEDERATED_STORAGE_ENGINE=1 \ # 摘掉 FEDERATED 存储引擎## WITHOUT_ARCHIVE_STORAGE_ENGINE=1 \ # 摘掉 ARCHIVE 存储引擎# 编译安装make -j4 && make install

MySQL 的编译是有进度条的,等待吧。

完成编译安装了~
05
配置环境变量
echo -e "export PATH=/usr/local/mysql/bin:\$PATH" >>/etc/profilesource etc/profile
验证
[root@localhost mysql-8.0.22]# mysql -Vmysql Ver 100.9.99 for Linux on x86_64 (Source distribution)
06
建组建用户
groupadd mysqluseradd -M -g mysql -s sbin/nologin -d usr/local/mysql mysql
07
创建目录结构
mkdir -p data/mysql/mysql3306/{data,logs,tmp}chown mysql:mysql data/mysql/mysql3306/ -R
08
准备配置文件
vi /my.cnf
[mysqld]user = mysqlbasedir = /usr/local/mysqldatadir = /data/mysql/mysql3306/datatmpdir = /data/mysql/mysql3306/tmpsocket = /tmp/mysql.socklog_error = /data/mysql/mysql3306/error.log
09
初始化实例
mysqld --initialize-insecure

10
启动 MySQL
mysqld &
11
验收环境
1. 确认版本号,确认是 debug 版本
cat /data/mysql/mysql3306/error.log |grep -i versionmysql -Vmysql -e "select @@version"

2. 确认默认读取的配置文件是 /my.cnf
yum install strace -ystrace mysql -e "select 1" 2>2.logcat 2.log |grep my.cnf

检查发现,读取 /etc/my.cnf ,但后面还会读取 /my.cnf 。
说明之前我们对 SYSCONFDIR=/ 编译参数确实生效了。
作为对比,请参考下图正常版本的 MySQL:

对比后可以发现,取代的是默认第三读取顺序的路径,即 /usr/local/mysql/etc/
3.确定已经摘掉了 FEDERATED 和 ARCHIVE。
select version();show engines;
正常的 MySQL

我们编译的 MySQL

确实已经内置摘除了 FEDERATED 和 ARCHIVE 存储引擎。
Enjoy MySQL!
参考:
https://dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html
https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html

扫描二维码
关注我们
国内最大IT云-移动IT云IAAS产品、云管服务介绍、新鲜消息、产品体验、运营推广、前沿技术、精华文章分享






