MySQL 5.7 编译调试指南(Ubuntu 16.04 + MacOS 10.15)

本文主要介绍在MacOS 10.15Ubuntu 16.04系统下编译构建MySQL 5.7.30并使用JetBrains CLion(以下简称CLion)进行运行调试的方法。

下载源码

可以从两种方式下载MySQL源代码:

从官方代码库下载最新源代码

1
2
3
4
# clone过程可能耗时比较长
git clone https://github.com/mysql/mysql-server.git
# 可以切换至指定版本对应分支
git checkout 5.7

下载源代码分发包

MySQL提供了各个版本的源码分发包供下载。下载地址:MySQL Product Archives,选择指定版本下载解压即可。

安装依赖

对于各个依赖或者工具,安装前可以先验证一下是否已经安装,一些工具系统已经预装。

1. 构建工具 CMake + make

Ubuntu上:

1
sudo apt install cmake make

MacOS上:

1
brew install cmake make

MySQL 5.7 Reference Manual建议的makeGNU make 3.75或者更高版本。

2. 编译工具 GCC/Clang

Ubuntu上,MySQL可以使用GCC或者Clang来编译,这里我们使用apt来安装GCC

1
sudo apt install gcc

MacOS上,MySQL会使用Clang编译器来编译,一般MacOS系统已经安装好了Clang,如果没有的的话可以通过安装Xcode来方便地安装Clang。可以在App Store中下载完整Xcode,或者使用如下命令来安装Xcode command line tools

1
xcode-select --install

根据MySQL 5.7 Reference Manual,对于MySQL 5.7,支持的GCC最低版本是4.4,支持的Clang最低版本是3.3

3. OpenSSL

Ubuntu下:

1
sudo apt install openssl libssl-dev

MacOS下:

1
brew install openssl

根据MySQL 5.7 Reference Manual,对于MySQL 5.7,支持的最小OpenSSL版本是1.0.1

4. Boost

根据MySQL 5.7 Reference Manual,对于MySQL 5.7,必须要使用1.59.0版本。在Boost Version History下载Boost 1.59.0并解压。

因为1.59.0是比较老的版本,所以并不推荐直接使用包管理器在全局安装一个旧版本的Boost,所以我们这里采用下载后在构建时指定其路径的方法。

5. ncurses

Ubuntu下:

1
sudo apt-get install libncurses5-dev

MacOS下:

1
brew install ncurses

6. Bison

Ubuntu下:

1
sudo apt-get install bison

MacOS下:

1
brew install bison

根据MySQL 5.7 Reference Manual,对于MySQL 5.7,支持的bison最低版本是2.1

编译构建

为了不影响机器上原本已经安装的MySQL,在配置构建过程中,我们自定义了一些配置避免与机器上另外的MySQL实例冲突。

1
2
3
4
5
6
7
8
9
10
11
# 进入源码目录
cd mysql-server
# 创建构建文件的目录及数据目录、临时文件目录
mkdir -p bld/data bld/tmp
# 配置,"/home/jiajiawang/workspace/mysql-server/"为源码目录的绝对路径
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/home/jiajiawang/workspace/mysql-server/bld -DMYSQL_DATADIR=/home/jiajiawang/workspace/mysql-server/bld/data -DMYSQL_UNIX_ADDR=/home/jiajiawang/workspace/mysql-server/bld/data/mysql.sock -DTMPDIR=/home/jiajiawang/workspace/mysql-server/bld/tmp/ -DMYSQL_TCP_PORT=3336 -DWITH_BOOST=/home/jiajiawang/software/boost_1_59_0

# 构建
make
# 安装MySQL
make install

上面配置的目录及文件位置最好都配置成绝对路径

CMake选项说明:

参数 含义 默认值
CMAKE_BUILD_TYPE 生成的构建类型,可选值有:RelWithDebInfoDebug ,使用Debug可以禁用优化,更有助于调试 RelWithDebInfo
CMAKE_INSTALL_PREFIX 指定MySQL安装路径 /usr/local/mysql
MYSQL_DATADIR 指定MySQL数据目录
MYSQL_UNIX_ADDR 指定Unix socket文件目录 /tmp/mysql.sock
TMPDIR 指定临时文件目录
MYSQL_TCP_PORT MySQL启动TCP端口号 3306
WITH_BOOST 指定Boost依赖的路径

更多选项说明请参考:MySQL 5.7 Reference Manual

配置并启动MySQL

1. 数据库初始化

1
cd bld

使用如下命令可以用来初始化数据库。两个参数的区别是--initialize会为root@localhost用户生成一个随机密码,而--initialize-insecure会设置root@localhost用户密码为空:

1
2
3
bin/mysqld --initialize
# 或者
bin/mysqld --initialize-insecure

创建加密连接需要的文件:

1
bin/mysql_ssl_rsa_setup

2. 启动 MySQL Server

启动MySQL Server

1
bin/mysqld

关于其他启动方式,参考:MySQL 5.7 Reference Manual

3. 使用 MySQL Client 连接 Server

使用MySQL Client连接Server

1
2
# 如果没有生成密码的话可以不指定-p
bin/mysql -uroot -p

使用初始化时生成的随机密码登录后需要修改密码才可以进行其他操作:

1
alter user 'root'@'localhost' identified by 'root';

4. 关闭MySQL Server

使用ps命令找到mysqld的进程ID,使用kill -9 <pid>杀掉进程。

导入CLion并运行/调试

  1. 导入CLion
  2. 设置CMake参数。点击File菜单栏,Settings | Build, Execution, Deployment | CMake,在CMake options输入框中输入上文执行cmake命令时的参数。
  3. 运行/调试MySQL。点击Run菜单栏,Edit Configurations,左侧CMake Application列出了MySQL中的各个程序,例如mysqldMySQL ServermysqlMySQL CLient,可以在对应的Program arguments中配置各种参数。

参考

  1. Installing MySQL from Source
  2. Postinstallation Setup and Testing
  3. Server Command Options
  4. Running Multiple MySQL Instances on One Machine