前言
想對的MySQL底層實作做一些了解,奈何沒有用過C++不知道怎麼調試一個大型項目,一日和大神交流時大神扔給我了一份《XCode調試MySQL8秘籍》。于是在幾經波折(主要是因為菜)之後終于打開了MySQL的調試大門。
環境搭建
準備
MacOS: 10.14.5:因為根據大神秘籍,要使用Xcode,但Xcode下載下傳目前隻支援10.14.3,是以在10.13.6下強升的系統版本,Xcode下MySQL成功編譯運作成功,但是遇到了詭異的調試無法的問題,排查無果最後轉用CLion
CLion:2019.1.3
mysql源碼:
https://github.com/mysql/mysql-servercmake和boost:brew install cmake boost
編譯
MySQL源碼目錄:/var/workspace/mysql/mysql-8.0.16/
boost目錄:/usr/local/Cellar/boost/1.68.0_1
cd /var/workspace/mysql/mysql-8.0.16/
mkdir work
cd work
cmake . -DWITH_DEBUG=1 -DCMAKE_INSTALL_PREFIX=/var/workspace/mysql/mysql-8.0.16/work -DMYSQL_DATADIR=/var/workspace/mysql/mysql-8.0.16/work/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DENABLED_LOCAL_INFILE=1 -DENABLED_LOCAL_INFILE=1 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/Cellar/boost/1.68.0_1 -DFORCE_INSOURCE_BUILD=1
make -j 4
make install -j 4
cd /var/workspace/mysql/mysql-8.0.16/work
sudo bin/mysqld --basedir=/var/workspace/mysql/mysql-8.0.16/work --datadir=/var/workspace/mysql/mysql-8.0.16/work/data --initialize-insecure --user=mysql
如果最後一步執行出錯可以參考
https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html建立mysql-files并修改權限

可能會有各種神奇的報錯,主要是權限問題!
搞不定的話參考下面有最終的目錄權限截圖
配置
導入mysql-8.0.16項目,配置cmake參數
options參考編譯過程中的cmake參數
選擇mysqld 并編輯啟動參數
arguments如下:
--basedir=/var/workspace/mysql/mysql-8.0.16/work --datadir=/var/workspace/mysql/mysql-8.0.16/work/data --user=mysql
啟動調試,此時可能還會報錯
還是權限問題。。。clion無法以root權限啟動debug,嘗試各種方法無效。是以把mysql的data目錄改為777
最終目錄權限如下圖:
再此點選debug按鈕,啟動成功(注意沒error了,可以用用戶端測試啟動成功了)。
調試
我們在代碼中打上斷點,用戶端執行SQL語句時就能在斷點處看到各變量資訊了,比如圖中的SQL解析。
可以看到執行阻塞了
Clion代碼調試的具體方法不做贅述了,網上一堆。
總結
之前一直想調試MySQL,但是總是沒有邁出第一步,代碼下載下傳下來就完事兒了。這次一鼓作氣走了下來,希望能開個好頭,養成各種代碼調試的好習慣。看代碼中細節比任何文檔中都來的紮實(當然,時間充裕前提下)。
搭建環境的過程中遇到了很多問題,Google、百度無數遍都沒有能解決問題,最終還是通過MySQL的官方手冊找到的答案。MySQL的官方手冊簡直神器,大家可以好好利用起來。
C++的知識僅停留在大學課本階段,閱讀源碼簡直困難,要能堅持下去,加油!