前面寫了幾篇文章來經過調試 MySQL 源碼來分析死鎖問題,有讀者問如何用 IDE 調試源碼,這篇文章簡單介紹一下如何在 Mac 下調試。mysql
之因此使用調試的方式來分析死鎖問題是由於在解決 MySQL 死鎖的過程當中比較糾結,就算找到了緣由,也比較難說服本身原理就是書上或者網上博客裏些的那樣,因此就開始研究 MySQL 的源碼,花了一些時間搭建了在 Clion 中調試源碼的環境。整個過程其實很是簡單也很順利。sql
Clion 是宇宙第二強的 IDE 公司 jetbrains 旗下的一款 C/C++ IDE 工具,咱們作 Java 用的 IntelliJ IDEA、Python 用的 PyCharm、Go 用的 Goland 都是出自這家,很好很強大。 從下面的地址下載安裝:www.jetbrains.com/clion/shell
這裏選擇的是 5.5 版本的源碼,源碼體積和編譯速度比 5.7 的快太多,對於咱們理解 MySQL 的原理沒有太大的區別,因此這裏選擇了 5.5數據庫
# 1. 下載解壓源碼
wget https://cdn.mysql.com//Downloads/MySQL-5.5/mysql-5.5.62.tar.gz
tar -xzvf mysql-5.5.62.tar.gz
# 2. 生成目錄
// 生成編譯後安裝目錄及數據目錄
mkdir -p build_out/data
# 3.編譯
cmake . -DWITH_DEBUG=1 \
-DCMAKE_INSTALL_PREFIX=build_out \
-DMYSQL_DATADIR=build_out/data
make && make install
# 4. 初始化 mysql 數據庫
cd build_out
scripts/mysql_install_db
複製代碼
1.配置 Cmake,內容以下圖 bash
2.配置mysqld的啓動參數,指定讀取的配置文件路徑--defaults-file=/path/to/my.cnf
一個可參考的 my.conf 配置以下
[mysqld]
log-error=log.err
datadir=data
pid-file=user.pid
skip-grant-tables
innodb_file_per_table=1
port=33060
transaction_isolation = READ-COMMITTED
[client]
# 客戶端來源數據的默認字符集
default-character-set = utf8mb4
[mysqld]
# 服務端默認字符集
character-set-server=utf8mb4
# 鏈接層默認字符集
collation-server=utf8mb4_unicode_ci
[mysql]
# 數據庫默認字符集
default-character-set = utf8mb4
複製代碼
點擊 debug 按鈕進行調試 微信
ps:注意 mysqld 所在的列表不是按字母序來排序的,拼命往下拉就能夠找到了。函數
不出意外這個時候,MySQL 就啓動起來了,監聽了咱們上面設置的 33060 端口,用 MySQL 的客戶端就能夠正常鏈接上去了(帳號 root,密碼空)工具
Cion 能夠很是方便的斷點單步調試和查看變量的值,好比咱們在sql_parse.cc
的do_command
函數打一個斷點,隨便執行一個 sql 語句就能夠看到單步調試到了這裏ui