新手使用 Macos CLion 搭建MySQL源码debug环境
共 3658字,需浏览 8分钟
·
2021-09-26 19:21
看了很多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 工程
3.2 找到mysql-5.5.62 文件夹,导入
3.3 导入【Open Existing Project】
由于对于CLion 以及cmake 不熟悉,我在这一步犯错了。我们前面已经编译完 mysql 了,所以这儿不能再按照新项目导入,而是应该选择open Existing Project
。
3.4 配置cmake 参数
填入我们在 编译环节的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 。
3.5 配置mysqld 参数
从下面这个地方进入:
增加 --default-file 参数, 指定配置读取的位置
--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
第一次比较慢,耐心等待一下~ 出现下图,就说明启动起来了:
我们看下本地端口:
lsof -i:33060
复制代码
端口已经启动起来了,good~
4.2 使用navicate 连接
注意我们的端口是 33060
初始化时 我们并没有给root 设置密码,所以连接时密码为空即可。
4.3 打断点与调试
比如我们在 do_command 这儿加断点,navicate 连接时,就会停在这儿了。
疯狂F9 之后,跳过了断点,我们看到已经连接成功了。
来看下navicate 视角, 图标已经亮了,也已经链接成功了。
附录 参考文献
MySQL 源码编译
ssl升级
作者:chainerup
链接:https://juejin.cn/post/7010679277955842062
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。