轉載:
https://www.modb.pro/db/111795
操作系統:MAC OS 11.5.2
MySQL源碼版本:8.0.26
VSCode版本: 1.60.0
1、編譯安裝MySQL
1、MySQL源碼下載,建議下載自帶boost的版本
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.26.tar.gz
2、安裝cmak,建議用brew安裝
brew install cmake
brew install gcc
3、編譯安裝MySQL
cd
cmake . -DCMAKE_INSTALL_PREFIX=/Users/yangminghan/Documents/mysql -DMYSQL_DATADIR=/Users/yangminghan/Documents/mysql/data -DWITH_DEBUG=1 -DSYSCONFDIR=/usr/local/ -DMYSQL_TCP_PORT=3306 -DWITH_BOOST=/Users/yangminghan/Documents/mysql-8.0.26/boost -DFORCE_INSOURCE_BUILD=1
make && make install
export PATH=$PATH:/Users/yangminghan/Documents/mysql/bin
#將之前安裝的mysql刪除
brew list
brew uninstall mysql
#編輯配置文件
/Users/yangminghan/Documents/mysql/my.cnf
#初始化
mysqld --defaults-file=/Users/yangminghan/Documents/mysql/my.cnf --user=yangminghan --initialize
#啟動服務
mysqld_safe --defaults-file=/Users/yangminghan/Documents/mysql/my.cnf &
#創建用戶修改密碼
alter user 'root'@'localhost' identified by 'Tcdn@2007';
create user 'root'@'%' identified by 'Tcdn@2007';
grant all privileges on *.* to 'root'@'%' with grant option;
2、安裝配置VSCode
1、官網下載mac版本 https://code.visualstudio.com/Download
1.png
2、安裝插件
CodeLLDB,C/C++,C/C++ Clang Command Adapter,Code Runner
2.png
3、在vscode中打開MySQL源碼
3.png
4.png
3、啟動調試
進入運行與調試功能
5.png
編輯launch.json,其中type填寫lldb,program填寫編譯好的可執行文件,args填寫啟動參數
{
// 使用 IntelliSense 了解相關屬性。
// 懸停以查看現有屬性的描述。
// 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "launch",
"type": "lldb",
"request": "launch",
"program": "/Users/yangminghan/Documents/mysql/bin/mysqld",
"args": ["--defaults-file=/Users/yangminghan/Documents/mysql/my.cnf","--user=yangminghan"],
}
]
}
F5或點擊運行按鈕,啟動調試
6.png
從控制台輸出可以看到MySQL進程已啟動,在終端上可以正常登陸
7.png
8.png
打斷點調試
在 sql/sql_parse.cc do_command上打一個斷點
9.png
執行一個簡單的insert操作,可以看到在事務提交時binlog.cc中會根據事件的 binlog_format 返回有關緩存內容的信息。當may_have_sbr_stmts為false時代表事務是rbr_only的,這時將在binlog中打印語句將事務隔離級別更改為 READ COMMITTED,已加快備庫應用binlog的速度
10.png
11.png
12.png
源碼調試可以加深對MySQL架構、細節的理解,但需要花費較多時間逐漸積累。
以上只是一個搭建環境的簡單記錄,有興趣的同學可以自己嘗試。