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 編輯過