新手使用 Macos CLion 搭建MySQL5.5源码debug环境

1,456 阅读3分钟

看了很多MySQL 的原理分析文章,懂了一些,但是没有看源码,总感觉些许缺憾,于是趁着假期,搭建一套debug环境,为后续验证原理以及自己的猜想做准备。

网上一些文章操作,里面有些步骤跳过比较严重,加之自己对Clion /c++ 不熟悉,导致搭建过程失败。前后折腾了2天,现调试通过,整理一下,方便后来人。如果有文章没有涉及到的问题,也欢迎留言沟通~

环境配置如下:

macOS Mojave 版本10.14.6
Clion 2020.1
MySQL version: 5.5.62

1 编译 与安装 MySQL 源码

1.1 download source code

跳转到你的路径下:

cd {path_to_build}

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

如果有wget ,可以使用 wget 下载

wget https://cdn.mysql.com//Downloads/MySQL-5.5/mysql-5.5.62.tar.gz

如果没有,自己在浏览器上输入指令直接下载即可。然后copy 到 安装路径下面。

cp mysql-5.5.62.tar.gz {path_to_build}

1.2 解压

tar zxvf mysql-5.5.62.tar.gz

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

cd mysql-5.5.62
mkdir -p build_out/data

1.4 编译

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

然后执行编译。

make && make install

1.4.1 编译问题:boost 缺失问题

注意:开始时并没有指定boost, 但是因为由于我本地没有boost, 所以会失败。

CMake Error at cmake/boost.cmake:88 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>

加一下如下配置即可:

-DDOWNLOAD_BOOST=1 \
 -DWITH_BOOST=/Users/xxx/cppProject/boost \

其中 /Users/xxx/cppProject/boost 为 你指定的boost 地址,如果没有需要手动创建好一个。

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

mac上默认安装openssl 是 1.0.2s 版本,而MySQL 要求1.1.1 及以上的版本。 解决方案:

步骤1、安装openssl 高版本
brew install openssl@1.1
步骤2、建立软链  
mv /usr/local/opt/openssl /usr/local/opt/openssl.bak
ln -s /usr/local/opt/openssl@1.1 /usr/local/opt/openssl

如果不建软链,在cmake 的时候,会去找 /usr/local/opt/openssl 还是会找到老版本。

1.5 初始化数据库

 cd build_out 
 scripts/mysql_install_db

2 下载CLion

下载地址: www.jetbrains.com/clion/ 网上有破解版,不过还是建议您使用正版~

3 配置CLion

3.1 创建cmake 工程

image.png

3.2 找到mysql-5.5.62 文件夹,导入

image.png

3.3 导入【Open Existing Project】

image.png 由于对于CLion 以及cmake 不熟悉,我在这一步犯错了。 我们前面已经编译完 mysql 了,所以这儿不能再按照新项目导入,而是应该选择 open Existing Project

image.png

3.4 配置cmake 参数

image.png

image.png

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

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

然后选择Apply, OK 即可。

待CMake编译完,选择mysqld 。

image.png

3.5 配置mysqld 参数

从下面这个地方进入:

image.png

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

image.png

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

my.cnf 的配置如下:

[mysqld]
log-error=log.err
datadir=/Users/xxx/cppProject/mysql_source/mysql-5.5.62/build_out/data
pid-file=user.pid
skip-grant-tables
innodb_file_per_table=1
port=33060
transaction_isolation = READ-COMMITTED
## lc-messages-dir用来指定信息路径, 这个是编译之后的路径。路径添加规则见下文。
lc-messages-dir= /Users/xxx/cppProject/mysql_source/mysql-5.5.62/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 不添加,会报错。

2021-09-21T12:06:49.320795Z 0 [ERROR] Can't find error-message file '/Users/xxx/cppProject/mysql_source/mysql-5.7.32/build_out/share/errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive.

添加规则:

需要到share 这一层,因为加载时  路径为  share那一层饥渴。

Basically, mysqld first tries to look for the file under 

lc_messages_dir + language + errmsg.sys (in my case, /usr/local/mysql/data/english/errmsg.sys)

https://bugs.mysql.com/bug.php?id=67576

4 启动与调试

4.1 debug 模式启动 mysqld

image.png 第一次比较慢,耐心等待一下~ 出现下图,就说明启动起来了:

image.png

我们看下本地端口:

lsof -i:33060

image.png

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

4.2 使用navicate 连接

注意我们的端口是 33060

image.png

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

4.3 打断点与调试

比如我们在 do_command 这儿加断点,navicate 连接时,就会停在这儿了。

image.png

疯狂F9 之后,跳过了断点,我们看到已经连接成功了。 image.png

来看下navicate 视角, 图标已经亮了,也已经链接成功了。

image.png

附录 参考文献

MySQL 源码编译

ssl升级