本文主要介绍在MacOS 10.15和Ubuntu 16.04系统下编译构建MySQL 5.7.30并使用JetBrains CLion(以下简称CLion)进行运行调试的方法。
下载源码
可以从两种方式下载MySQL源代码:
从官方代码库下载最新源代码
# clone过程可能耗时比较长
git clone https://github.com/mysql/mysql-server.git
# 可以切换至指定版本对应分支
git checkout 5.7
下载源代码分发包
MySQL提供了各个版本的源码分发包供下载。下载地址:MySQL Product Archives,选择指定版本下载解压即可。
安装依赖
对于各个依赖或者工具,安装前可以先验证一下是否已经安装,一些工具系统已经预装。
1. 构建工具 CMake + make
在Ubuntu上:
sudo apt install cmake make
在MacOS上:
brew install cmake make
MySQL 5.7 Reference Manual建议的make为GNU make 3.75或者更高版本。
2. 编译工具 GCC/Clang
在Ubuntu上,MySQL可以使用GCC或者Clang来编译,这里我们使用apt来安装GCC:
sudo apt install gcc
在MacOS上,MySQL会使用Clang编译器来编译,一般MacOS系统已经安装好了Clang,如果没有的的话可以通过安装Xcode来方便地安装Clang。可以在App Store中下载完整Xcode,或者使用如下命令来安装Xcode command line tools:
xcode-select --install
根据MySQL 5.7 Reference Manual,对于MySQL 5.7,支持的GCC最低版本是4.4,支持的Clang最低版本是3.3。
3. OpenSSL
在Ubuntu下:
sudo apt install openssl libssl-dev
在MacOS下:
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下:
sudo apt-get install libncurses5-dev
在MacOS下:
brew install ncurses
6. Bison
在Ubuntu下:
sudo apt-get install bison
在MacOS下:
brew install bison
根据MySQL 5.7 Reference Manual,对于MySQL 5.7,支持的bison最低版本是2.1,
编译构建
为了不影响机器上原本已经安装的MySQL,在配置构建过程中,我们自定义了一些配置避免与机器上另外的MySQL实例冲突。
# 进入源码目录
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 | 生成的构建类型,可选值有:RelWithDebInfo,Debug ,使用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. 数据库初始化
cd bld
使用如下命令可以用来初始化数据库。两个参数的区别是--initialize会为root@localhost用户生成一个随机密码,而--initialize-insecure会设置root@localhost用户密码为空:
bin/mysqld --initialize
# 或者
bin/mysqld --initialize-insecure
创建加密连接需要的文件:
bin/mysql_ssl_rsa_setup
2. 启动 MySQL Server
启动MySQL Server:
bin/mysqld
关于其他启动方式,参考:MySQL 5.7 Reference Manual
3. 使用 MySQL Client 连接 Server
使用MySQL Client连接Server:
# 如果没有生成密码的话可以不指定-p
bin/mysql -uroot -p
使用初始化时生成的随机密码登录后需要修改密码才可以进行其他操作:
alter user 'root'@'localhost' identified by 'root';
4. 关闭MySQL Server
使用ps命令找到mysqld的进程ID,使用kill -9 <pid>杀掉进程。
导入CLion并运行/调试
- 导入
CLion - 设置
CMake参数。点击File菜单栏,Settings | Build, Execution, Deployment | CMake,在CMake options输入框中输入上文执行cmake命令时的参数。

- 运行/调试
MySQL。点击Run菜单栏,Edit Configurations,左侧CMake Application列出了MySQL中的各个程序,例如mysqld为MySQL Server,mysql为MySQL CLient,可以在对应的Program arguments中配置各种参数。