MySQL 源代碼是基於關係模型理論的具體實現,是數據庫理論與實踐的結合。mysql
閱讀 MySQL 及相關工具的源代碼,不只是數據庫研發人員的平常,也是 DBA 進階的必經之路,全方位提升技術水平。git
閱讀 MySQL 源代碼,主要是指閱讀 mysql-server[1] 裏面的代碼。不只須要理論知識的深刻學習,還須要實際應用上手實踐,具體可從如下幾個角度着手,從不一樣維度,不一樣深度去了解 MySQL 源代碼。github
經過環境調試,從理論基礎實踐掌握 SQL 語句(DDL/DML 等)完整的執行流程。sql
經過 MySQL 源代碼結構層次,掌握底層技術原理。數據庫
數據庫對於使用者展示的是二維的關係表。在閱讀源碼的時候,能夠從數據抽象/數據轉換的角度去閱讀。微信
經過觀察數據庫中每種具體功能的實現方式,來熟悉 MySQL 源代碼。架構
正所謂:「工欲善其事必先利其器」,閱讀源代碼必需要閱讀 "動" 態的代碼,僅看 "靜" 態代碼一定是枯燥且無用的。那麼搭建一個可以調試 MySQL 源代碼的環境,則是閱讀 MySQL 源代碼,實踐並掌握 MySQL 技術知識必不可少的過程。框架
本文介紹使用 CLion 在 Ubuntu 下的調試過程,來實例演示 MySQL 源代碼環境的調試過程,即從實踐掌握 SQL 執行流程。運維
CLion[2] 是一款專門爲開發 C 及 C++ 所設計的跨平臺 IDE。它包含了插件以及智能功能來幫助開發人員提升開發代碼的效率。函數
apt install libncurses-dev apt install libssl-dev apt install cmake apt-get install bison
*MySQL 8.0.25 依賴 boost 1.73.0 版本[3]
經過 CLion 調試 MySQL 源代碼,需將 MySQL 編譯路徑與 MySQL 安裝路徑的配置統一。
1. 將下載的源代碼放入 home 目錄中
2. 解壓源代碼,並在源代碼目錄下建立 build 和 /build/data 兩個目錄
3. 配置 CLion 的 Cmake 的編譯目錄
4. 配置 CLion 的 Cmake 的編譯參數
-DCMAKE_BUILD_TYPE=Debug -DWITH_BOOST=/home/tool/boost_1_73_0 -DCMAKE_INSTALL_PREFIX=/home/code/mysql-server-mysql-8.0.25/build #編譯路徑與安裝路徑需一致 -DMYSQL_DATADIR=/home/code/mysql-server-mysql-8.0.25/build/data #數據庫初始化路徑 -DSYSCONFDIR= home/code/mysql-server-mysql-8.0.25/build -DMYSQL_UNIX_ADDR=/home/code/mysql-server-mysql-8.0.25/build/data/mysql.sock
5. MySQL 編譯
方法一:使用 CLion 直接編譯
方法二:手動編譯
cd /home/code/mysql-server-mysql-8.0.25/build make -j 4
說明:因爲 CLion 導入 MySQL 源代碼時,會在
/home/code/mysql-server-mysql-8.0.25/build
下面生成 makefile,能夠直接執行 make 命令。
6. MySQL 數據庫初始化
# 建立 MySQL 用戶組和 MySQL 用戶 groupadd mysql useradd -r -g mysql -s /bin/false mysql # MySQL 數據庫初始化 cd /home/code/mysql-server-mysql-8.0.25/build/bin ./mysqld --basedir=/home/code/mysql-server-mysql-8.0.25/build \ --datadir=/home/code/mysql-server-mysql-8.0.25/build/data \ --initialize-insecure --user=mysql
7. 修改文件權限
chmod -R 777 /home/code/mysql-server-mysql-8.0.25/build/data
8. 設置 CLion 的 mysqld 配置參數
Program arguments
參數設置爲:
--basedir=/home/code/mysql-server-mysql-8.0.25/build --datadir=/home/code/mysql-server-mysql-8.0.25/build/data --user=mysql
Working directory
參數設置爲:
/home/code/mysql-server-mysql-8.0.25/build/data
9. 調試 mysqld
步驟一:啓動 mysqld ,並驗證 mysqld 是否啓動 ps -ef | grep mysql
步驟二:在 sql_parse.cc 中的 do_command
函數加上斷點。
步驟三:登陸 MySQL ,驗證環境是否正常運行。
./mysql -uroot -h127.0.0.1 -P3306 -p
說明:初次登陸無需密碼,直接回車。初始化時的參數
--initialize-insecure
。
至此 MySQL 源代碼調試環境正常運行,可在調試環境上執行相關操做。瞭解 MySQL 源代碼運行機制、實現原理、配置參數做用等。
下一期,咱們將使用準備好的環境一塊兒來閱讀 MySQL 插件框架部分的源碼,盡情期待~
[1]. mysql-server:https://github.com/mysql/mysql-server/
[2]. CLion:https://www.jetbrains.com/clion/
[3]. boost :https://www.boost.org/
RadonDB開源社區 是一個面向雲原生、容器化的數據庫開源社區。爲數據庫技術愛好者提供圍繞主流開源數據庫(MySQL、PostgreSQL、Redis、MongoDB、ClickHouse 等)的技術分享平臺,並提供企業級 RadonDB 開源產品及服務。
目前 RadonDB 開源數據庫系列產品已被 光大銀行、浦發硅谷銀行、哈密銀行、泰康保險、太平保險、安盛保險、陽光保險、百年人壽、安吉物流、安暢物流、藍月亮、天財商龍、羅克佳華、升哲科技、無錫匯跑體育、北京電信、江蘇交通控股、四川航空、昆明航空、國控生物 等上千家企業及社區用戶採用。
RadonDB 可基於雲平臺與 Kubernetes 容器平臺交付,不只提供覆蓋多場景的數據庫產品解決方案,並且提供專業的集羣管理和自動化運維能力,主要功能特性包括:高可用主從切換、數據強一致性、讀寫分離、一鍵安裝部署、多維指標監控&告警、彈性擴容&縮容、橫向自由擴展、自動備份&恢復、同城多活、異地災備 等。RadonDB 僅需企業及社區用戶專一於業務層邏輯開發,無需關注集羣高可用選型、管理和運維等複雜問題,幫助企業及社區用戶大幅度提高業務開發與價值創新的效率!
GitHub:
https://github.com/radondb
微信羣: 請搜索添加羣助手微信號 radondb