Mysql源码学习--源码调试环境搭建

1,898 阅读3分钟

在看了《Mysql技术内幕 InnoDB存储引擎》和《高性能Mysql》这两本书之后,对Mysql源码产生了浓厚的兴趣,于是准备在自己的本地搭建一个Mysql源码调试的环境。Windows环境下需要在本地安装WSL,安装过程很简单,大家自己查找相关教程即可。

1 下载最新源码

image.png 首先从Github上下载最新的Mysql源代码,这里下载ZIP压缩包即可,压缩包的内容是源码最新版本的快照,而通过git clone下来的代码包含了所有版本的源代码和提交记录。

然后将下载下来的源代码拷贝到WSL中的指定位置。

image.png

然后解压

image.png

2 编译前的准备工作

在编译Mysql源代码之前我们需要做一些准备工作,比如安装一些编译时的依赖等。

2.1 安装CMake

sudo apt install cmake

image.png

2.2

sudo apt install make

image.png

2.3 保证GCC版本大于7,1

gcc --version

image.png

2.4 安装SSL

sudo apt-get install libssl-dev

image.png

2.5 安装Boost库

Boost下载地址 选择合适的版本进行下载,目前mysql8.0需要的版本为1.77

image.png 选择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ㄒ)/~~

image.png 安装成功之后,在/usr/local/mysql目录下可以看到安装好的文件。

image.png

编译过程中可能会抛出如下的错误,原因是虚拟机内存不足,需要杀掉部分进程以释放内存。

Snipaste_2022-06-30_11-25-46.png

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

执行初始化后的输出中具有数据库的初始密码:

image.png 执行上面的代码过程中可能会遇到如下的错误:

image.png 解决方法:

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,这里需要安装如下的插件:

image.png

image.png

然后连接到WSL:

image.png

设置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
}

添加测试断点:

image.png

点击调试按钮:

image.png

创建测试数据库和数据表,并插入测试数据:

image.png

可以观察到触发了断点:

Snipaste_2022-06-30_11-57-09.png

由此我们的Mysql源码调试环境就搭建好了,同学们可以自己尝试一下。