Macos CLion 搭建MySQL5.7 源码debug环境

890 阅读3分钟

昨天搭建了MySQL5.5 源码的debug 环境,趁热打铁,搭建一下MySQL5.7的环境,主要标注一些与5.5 搭建时不同的部分。后面分析原理就在5.7基础上研究了。

有文章没有涉及到的问题,也欢迎留言沟通~

环境配置如下:

macOS Mojave 版本10.14.6
Clion 2020.1
MySQL version: 5.7.35

1 编译 与安装 MySQL 源码

1.1 download source code

代码地址:cdn.mysql.com//Downloads/…

1.2 解压

tar zxvf mysql-5.7.35.tar.gz

1.3 跳转到代码路径里面,然后创建build 路径

cd mysql-5.7.35
mkdir -p build_out/data

1.4 编译

cmake . -DWITH_DEBUG=1 -DWITH_BOOST=/Users/xxx/cppProject/boost -DCMAKE_INSTALL_PREFIX=build_out -DMYSQL_DATADIR=build_out/data 

这儿去掉了换行符号,因为在Clion 配置cmake 参数时,加入 \ 会不识别。

然后执行编译。

make -j 24 && make install

这儿的 -j 24 是 启动24个线程编译。

1.4.1 编译问题:boost 缺失问题

如果没有boost ,可以参考MySQL5.5 源码的debug 环境 先安装boost.

1.4.2 编译问题:openssl 版本过低的问题

如果ssl 版本低 ,可以参考MySQL5.5 源码的debug 环境 先升级ssl.

1.5 初始化数据库

5.7 不是这样初始化,所以这一步不需要,后面 mysqld parameter 参数中初始化。

2 配置CLion

2.1 创建cmake 工程

image.png

2.2 找到mysql-5.7.35 文件夹,导入

image.png

2.3 导入【Open Existing Project】

image.png 这儿选择open Existing Project

image.png

2.4 配置cmake 参数

image.png

image.png

填入我们在 编译环节的cmake 执行到CMake options: [注意 WITH_BOOST 要改为你自己的路径地址]

cmake . -DWITH_DEBUG=1 -DWITH_BOOST=/Users/xxx/cppProject/boost -DCMAKE_INSTALL_PREFIX=build_out -DMYSQL_DATADIR=build_out/data 

然后选择Apply, OK 即可。

待CMake编译完,选择mysqld 。

image.png

2.5 配置mysqld 参数

从下面这个地方进入:

image.png

2.5.1 初始化

先配置 --initialize-insecure ,执行debug.

遇到了一个报错:

执行过程中,先添加了--defaults-file 参数,执行了debug, 导致在添加 --initialize-insecure之后 执行debug时 报如下错误:

[ERROR] --initialize specified but the data directory has files in it. Aborting.

这是因为在添加--initialize-insecure 之前,执行过,所以 build_out/data 目录下 有文件了。可以把data目录删掉,然后重新创建一个,再次执行debug 即可。

此时初始化成功。

image.png

2.5.2 增加my.cnf

增加 --defaults-file 参数, 指定配置读取的位置

image.png

--defaults-file=/Users/xxx/cppProject/mysql_source/mysql-5.7.35/build_out/my.cnf

my.cnf 的配置如下:

[mysqld]
log-error=log.err
datadir=/Users/xxx/cppProject/mysql_source/mysql-5.7.35/build_out/data
pid-file=user.pid
skip-grant-tables
innodb_file_per_table=1
port=33061
transaction_isolation = READ-COMMITTED
## lc-messages-dir用来指定信息路径, 这个是编译之后的路径。路径添加规则见下文。
lc-messages-dir= /Users/xxx/cppProject/mysql_source/mysql-5.7.35/build_out/share/

[client]
default-character-set = utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4

lc-messages-dir 添加规则可以参照上一篇文章 MySQL5.5 源码的debug 环境

3 启动与调试

3.1 debug 模式启动 mysqld

image.png 第一次比较慢,耐心等待一下~ 第一次出现了如下报错:

Warning: World-writable config file ‘xxx/my.cnf’ is ignored

出现这个warning 是因为我给my.cnf 文件配置了 777的权限,MySQL认为任何人都可以修改,不安全,所以需要手动降一下权限。

chmod 644 my.cnf

再次debug, 出现下图,就说明启动起来了:

image.png 我们看下本地端口:

lsof -i:33061

image.png 端口已经启动起来了,good~

3.2 使用本地MySQL客户端连接

端口是 33061

报错了~

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/Users/xxx/cppProject/mysql-data/mysql.sock'

那我们修改一下my.cnf,增加sock的路径。

image.png 初始化时 我们并没有给root 设置密码,所以连接时密码为空即可。

然后重新debug, 发现sock 文件已经生成了。

image.png

指定sock 位置,再次本地连接:

bin/mysql -u root -h localhost -P 33061 -S {your_mysql_sock_path}/mysql.sock

成功了:

image.png

3.3 打断点与调试

比如我们在 do_command 这儿加断点,执行show databases 时,就会停在这儿了。

image.png