在看了《Mysql技术内幕 InnoDB存储引擎》和《高性能Mysql》这两本书之后,对Mysql源码产生了浓厚的兴趣,于是准备在自己的本地搭建一个Mysql源码调试的环境。Windows环境下需要在本地安装WSL,安装过程很简单,大家自己查找相关教程即可。
1 下载最新源码
首先从Github上下载最新的Mysql源代码,这里下载ZIP压缩包即可,压缩包的内容是源码最新版本的快照,而通过git clone下来的代码包含了所有版本的源代码和提交记录。
然后将下载下来的源代码拷贝到WSL中的指定位置。
然后解压
2 编译前的准备工作
在编译Mysql源代码之前我们需要做一些准备工作,比如安装一些编译时的依赖等。
2.1 安装CMake
sudo apt install cmake
2.2
sudo apt install make
2.3 保证GCC版本大于7,1
gcc --version
2.4 安装SSL
sudo apt-get install libssl-dev
2.5 安装Boost库
Boost下载地址 选择合适的版本进行下载,目前mysql8.0需要的版本为1.77
选择zip文件下载并解压到指定的位置。
2.6 安装ncurses
sudo apt install libncurses-dev
2.7 添加mysql用户组和用户
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
3 编译安装
cd mysql-server-8.0
mkdir build
cd build
cmake .. -DWITH_BOOST=/home/cmy96/source_code/boost/boost_1_77_0 -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DWITH_DEBUG=1
make -j8
sudo make install
如果boost版本不匹配,在cmake执行阶段会抛出错误信息,别问我是怎么知道的/(ㄒoㄒ)/~~
安装成功之后,在/usr/local/mysql目录下可以看到安装好的文件。
编译过程中可能会抛出如下的错误,原因是虚拟机内存不足,需要杀掉部分进程以释放内存。
4 安装后的工作
cd /usr/local/mysql
sudo mkdir mysql-files
sudo chown mysql:mysql mysql-files
sudo chmod 750 mysql-files
sudo bin/mysqld --initialize --user=mysql
sudo bin/mysql_ssl_rsa_setup
sudo bin/mysqld_safe --user=mysql & sudo cp support-files/mysql.server /etc/init.d/mysql.server
执行初始化后的输出中具有数据库的初始密码:
执行上面的代码过程中可能会遇到如下的错误:
解决方法:
sudo mkdir /var/log/mariadb
sudo touch /var/log/mariadb/mariadb.log
sudo chown -R mysql:mysql /var/log/mariadb/
5 运行
sudo /etc/init.d/mysql.server start
6 登录并修改密码
sudo /usr/local/mysql/bin/mysql -u root -p
alter user 'root'@'localhost' identified with mysql_native_password by '123456';
7 调试
我们调试使用的工具是VS Code,这里需要安装如下的插件:
然后连接到WSL:
设置launch.json的内容,注意processId为mysql的进程ID,可以通过ps aux | grep mysql查看
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "cppdbg",
"request": "attach",
"name": "Debug",
"processId": "4492",
"program": "/usr/local/mysql/bin/mysqld",
"linux": {
"MIMode": "gdb",
"miDebuggerPath": "/home/cmy96/.local/bin/gdb"
}的
}
]
}
设置c_cpp_properties的内容:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++14",
"intelliSenseMode": "linux-clang-x64",
"configurationProvider": "ms-vscode.cmake-tools",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"
}
],
"version": 4
}
添加测试断点:
点击调试按钮:
创建测试数据库和数据表,并插入测试数据:
可以观察到触发了断点:
由此我们的Mysql源码调试环境就搭建好了,同学们可以自己尝试一下。