本文主要介绍在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
中配置各种参数。