1 前言
在运维MySQL的过程中,我们常会遇到无法用现有知识解释的问题。阅读源码不仅能帮助我们理解数据库底层逻辑,还能将零散的知识串联成体系。本文以VSCode远程调试MySQL 5.7源码为例,分享完整的环境搭建流程。若文中存在疏漏,欢迎指正交流。
2 环境准备
以下为本次实验的关键环境配置:
名称 | 详情 |
---|
数据库服务器 | 安装MySQL源码,服务器系统版本信息Centos7(内核: 3.10.0-1160.el7.x86_64) |
客户端 | 安装VSCode软件,window10 |
服务器GCC版本 | 10.2.1 |
服务器CMake版本 | 3.17.5 |
客户端VSCode版本 | 1.96.2 |
服务器上MySQL源码 | mysql-boost-5.7.44 |
3 详细步骤
3.1 服务器基础环境配置
yum -y install net-tools wget vim jemalloc-devel jemalloc libudev-devel ncurses-devel openldap openldap-devel cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi bison
3.2 服务器安装GCC
注意:CentOS 7默认GCC版本为4.8,需升级至10.x以支持C++17特性。
# 配置阿里yum源,追加以下内容
vi /etc/yum.repos.d/CentOS-Base.repo
[sclo-rh]
name=CentOS-$releasever - SCLo RH
baseurl=http://mirrors.aliyun.com/centos/$releasever/sclo/$basearch/rh/
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS7
# 更新源
yum install epel-release
yum install centos-release-scl
yum install -y centos-release-scl
yum clean all
yum makecache
scl enable devtoolset-10 bash
# 安装配置GCC
mv /usr/bin/gcc mv /usr/bin/gcc.bak
mv /usr/bin/g++ mv /usr/bin/g++.bak
update-alternatives --install /usr/bin/gcc gcc /opt/rh/devtoolset-10/root/usr/bin/gcc 60
update-alternatives --install /usr/bin/g++ g++ /opt/rh/devtoolset-10/root/usr/bin/g++ 60
update-alternatives --config gcc
update-alternatives --config g++
# 查看版本
gcc --version # 版本为10.2.1
g++ --version # 版本为10.2.1
3.3 安装CMake 3.17
说明:MySQL 5.7需CMake 3.5+,此处选择较新的3.17版本。
cd /etc/pki/rpm-gpg
wget https://archive.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
yum install cmake3
ln -s /usr/bin/cmake3 /usr/bin/cmake # 创建软链接
cmake -version
cmake3 version 3.17.5 # 返回信息代表CMake版本安装成功
3.4 服务器下载MySQL5.7软件包
下载与解压:
cd /home
wget -c 'https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.44.tar.gz'
tar -zxvf mysql-boost-5.7.44.tar.gz
配置MySQL参数(/etc/my.cnf
)
vi /etc/my.cnf
[mysqld]
lc-messages-dir=/home/mysql-5.7.44/build/sql/share
socket=/tmp/mysql.sock
skip-grant-tables
character_set_server=utf8
lower_case_table_names=1
[client]
socket=/tmp/mysql.sock
3.5 客户端VSCode配置
VSCode是一款跨平台源代码编辑器,我们编译调试MySQL5.7源码使用该IDE工具。首先打开VSCode,找到拓展,安装Remote SSH。安装成功后,使用该拓展连接远程LINUX服务器,快捷键Ctrl + Shift + p,首先我们需要安装以下插件:
- Remote - SSH (v0.66.1):远程连接服务器
- C/C++ (v1.7.1)
- CMake (v0.0.17)
- CMake Tools (v1.9.2)
- Code Spell Checker (v2.0.13)
- Doxygen Documentation Generator (v1.3.2)

连接远程Linux服务器:快捷键Ctrl + Shift + p(Windows)、Shift + Command + p(Mac),按照提示连接服务器后,点击“open folder”,选择自己的MySQL源码目录。 
3.6 编译前项目设置

- CMake选择 [Debug],对应上图中红色标注1
- GCC编译器选择我们之前安装的 [GCC10.2.1],对应上图中红色标注2
- 选择需要编译的程序,选择 [all] ,意为编译MySQL工程下的所有程序,对应上图中红色标注3
- 选择我们要调试的程序为 [mysqld],表示要运行MySQL Server程序,当遇到调试程序无法选择的情况,通过快捷键Ctrl + Shift + p,然后输入: CMake: Set Launch/Debug Target 进行修改,对应上图中红色标注4

3.7 编译前参数设置
在VSCode中依次添加: File → Preferences → Settings → 'cmake:Configure' → 【Cmake:Configure Args】 → Add Item
-DWITH_BOOST=./boost
-DDOWNLOAD_BOOST=1
-DWITH_JEMALLOC=1
(最好将下图Remote、Workspace页签全部都配置,防止出现问题) 
在VSCode依次添加: File → Preferences → Settings → 'cmake:Cache'→【Cmake:Cache Init】→ Edit in settings.json
"cmake.debugConfig": {"args:": ["--user=root"],}
(最好将下图Remote、Workspace页签全部都配置,防止出现问题) 
编译前准备工作就绪,点击最下面**【⚙ Build】**就可以开始编译了,如果最后输出“[build] Build finishded with exit code 0”则代表编译成功。 
3.8 初始化数据库
编译好源码,只是代表我们生成必要的服务,需要通过mysqld服务初始化数据库目录。
在数据库目录
/home/mysql-5.7.44/build/sql/mysqld --initialize --user=root # 初始化数据目录
/home/mysql-5.7.44/build/sql/mysqld --user=root # 测试服务是否可以正常启动,如果测试不成功,可以通过error日志进行分析,排查问题
3.9 开始调试
设置断点(鼠标左键在行号前单击一下即可),按最下面的小虫子
图标就可以调试程序了。

使用源码进行调试的时候,mysqld服务会将核心的日志输出。
使用mysql命令进入服务,执行下面的命令
set debug = 'd:t:o,/tmp/mysqld.trace';
select @@debug;
然后手动查看/tmp/mysqld.trace即可
4 其他
本文从环境配置到调试实战,完整演示了MySQL源码的远程调试方法。通过源码级调试,开发者可以深入理解InnoDB事务、SQL解析等核心机制,在学习调试的过程中逐步构建完整的数据库知识体系。本次环境搭建只是万里长城的第一步,后续可尝试在事务、查询优化等复杂场景中设置断点,观察内部状态变化,进一步提升问题排查能力。
转自https://juejin.cn/post/7476651892144947211
该文章在 2025/3/6 9:50:02 编辑过