主要参考大神张师傅的博客 juejin.cn/post/684490…
准备IDE
下载安装clion www.jetbrains.com/clion/
编译安装MySQL
# 1. 下载MySQL源码地址
git clone https://github.com/mysql/mysql-server.git
# 2. 生成目录
mkdir -p build_out/data
# 3.编译,注意5.5和5.7的编译命令有点不同,5.7源码编译时,需要下载一个boost.tar.gz,下面的命令选项 -DWITH_BOOST就是指定了boost的下载目录
# 如果不增加这个选项,执行命令的时候也会提示,按照提示增加对应选项即可。
cmake . -DWITH_DEBUG=1 \
-DCMAKE_INSTALL_PREFIX=build_out \
-DMYSQL_DATADIR=build_out/data \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=boost
# 如果boost由于网络原因下载不了,那么可以自己在源码目录下新建一个boost目录,然后在boost目录下载boost.tar.gz,再在命令执行的时候指定WITH_BOOST选项即可
# 下载命令如下:
wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
# 如果cmake没有问题,执行下面命令进行编译,最终会在build_out目录下生成mysql安装后的目录
make && make install
# 4. 初始化mysql数据库
cd build_out
# 注意和5.5版本的初始化命令不一样,在执行命令的时候也会有相关的提示。另外,如果发现执行不成功,检查一下build_out下是否已存在data文件,如果已经存在了的话,初始化data目录的时候会不成功。此时把data文件删掉或者重命名,再执行初始化命令即可。命令执行成功后,会看到build_out/data目录下有mysql、performance_schema等数据目录
./bin/mysqld --initialize
# 5. 如果你不知道自己的数据目录等等保存在了什么地方,也可以cd到build_out,然后通过这个命令看一下
./bin/mysqld --verbose --help
配置CLion
配置CMake
打开CLion的Preferences,然后下图进行添加cmake options,cmake options的内容就是上面的cmake参数。这里再摘出来:
-DWITH_BOOST=../boost -DWITH_DEBUG=1 -DCMAKE_INSTALL_PREFIX=build_out -DMYSQL_DATADIR=build_out/data
加了这个配置之后,CLion会再编译一遍,这个时候会在源码目录下看到有这个目录出现:
配置mysqld参数
可参考的my.cnf如下,可将其复制粘贴放在源码目录中,然后在运行配置中指定 --defaults-file=/path/to/my.cnf
。运行选项非常多,要找到mysqld选项
[mysqld]
log-error=log.err
datadir=data
pid-file=user.pid
skip-grant-tables
innodb_file_per_table=1
port=33061
transaction_isolation = REPEATABLE-READ
# 服务端默认字符集
character-set-server=utf8mb4
# 连接层默认字符集
collation-server=utf8mb4_unicode_ci
[client]
# 客户端来源数据的默认字符集
default-character-set = utf8mb4
user=root
password=root
[mysql]
# 数据库默认字符集
default-character-set = utf8mb4
运行和调试mysqld
运行mysqld
点击运行按钮,如无意外应该可以正常运行。此时运行窗口中是没有输出的,如果有错误日志的输出,可以到 /build_out/data/log.err
里面查看。
也可以通过命令检查mysqld是否真的按照自己设置的端口运行起来了
ps -efa | grep mysqld
通过这个命令可以看到mysqld的启动命令,如果你机器上运行了多个mysqld,通过这个命令就可以很清楚地看到自己通过源码编译安装运行的mysqld是哪个进程了
此时可以通过mysql客户端命令连上去,user_name是root, password是空,就可以看到数据库里面的sys performance_schema和information_schema等库了。
如果使用MySQL WorkBench来连接,这个时候可能不会看到这些库,可以参考 blog.csdn.net/long_yi_199… 打开配置开关,再刷新一下就可以看到了。
调试mysqld
选择sql_parse.cc
中的dispatch_command
函数,打上断点,以debug模式运行mysqld,然后随便执行一个select语句,就可以看到程序执行到断点的位置了
总体来说,整个过程还是比较顺利的,准备好调试环境之后,就可以通过调试源码的方式理解mysql中让人比较迷惑的加锁流程了。
本文正在参加「技术专题19期 漫谈数据库技术」活动