Mac下使用Clion調試MySQL源碼配置流程


   一條SQL語句是如何執行的?count(*),count(1)有什么不同?insert數據時為什么有時候會導致自增主鍵不連續?等等這一系列問題,可能我們在網上的各種文章上能看到具體的講解,但是很少有文章能分析到源碼層級,都是直接告訴我們結果是什么。深入理解這些問題的實現過程就需要我們自己去看MySQL的源碼來找尋答案。

   網上搜尋了一些調試源碼的文檔,發現不全面,所以結合自身配置過程,形成一篇教程以供參考。

一、准備工作

1、MacBook筆記本;[有homebrew]

2、創建MySQL安裝目錄和MySQL data目錄

#mysql安裝目錄
mkdir -p /Users/tal/data0/dev_mysql/build_out
#mysql data目錄 mkdir
-p /Users/tal/data0/dev_mysql/build_out/data

3、下載MySQL源碼包;

#這里選擇5.7.30版本: [https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.30.tar.gz]
#進入下載目錄
cd /Users/tal/data0/dev_mysql
#下載源碼包
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.30.tar.gz
#解壓源碼包
tar -zxvf mysql-5.7.30.tar.gz

4、cmake環境;

brew install cmake

這里額外說一下homebrew配置國內源以提高效率:

# 替換 Homebrew
git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git

# 替換 Homebrew Core
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

# 替換 Homebrew Cask
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git

# 替換 Homebrew-bottles
# 對於 bash 用戶:
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile
# 對於 zsh 用戶:
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
source ~/.zshrc

 

二、編譯安裝MySQL

#進入mysql解壓目錄
cd /Users/tal/data0/dev_mysql/mysql-5.7.30
#執行cmake 這里用sudo
sudo cmake . -DWITH_DEBUG=1 \
-DCMAKE_INSTALL_PREFIX=/Users/tal/data0/dev_mysql/build_out \
-DMYSQL_DATADIR=/Users/tal/data0/dev_mysql/build_out/data

若遇到以下報錯:

CMake Error at cmake/boost.cmake:88 (MESSAGE):
  You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>

  This CMake script will look for boost in <directory>.  If it is not there,
  it will download and unpack it (in that directory) for you.

  If you are inside a firewall, you may need to use an http proxy:

  export http_proxy=http://example.com:80

Call Stack (most recent call first):
  cmake/boost.cmake:245 (COULD_NOT_FIND_BOOST)
  CMakeLists.txt:547 (INCLUDE)


-- Configuring incomplete, errors occurred!
See also "/Users/tal/data0/dev_mysql/mysql-5.7.30/CMakeFiles/CMakeOutput.log".

則說明缺少boost,我們參照提示增加cmake參數:

#首先創建boost目錄
sudo mkdir -p /usr/local/boost

#然后
#增加DDOWNLOAD_BOOST=1 自動下載boost
#DWITH_BOOST=/usr/local/boost  指定boost目錄
sudo cmake . -DWITH_DEBUG=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost \
-DCMAKE_INSTALL_PREFIX=/Users/tal/data0/dev_mysql/build_out \
-DMYSQL_DATADIR=/Users/tal/data0/dev_mysql/build_out/data

如果網絡不好的話,估計會超時,下載不下來boost,會提示:

CMake Error at cmake/boost.cmake:194 (MESSAGE):
  You can try downloading
  http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
  manually using curl/wget or a similar tool, or increase the value of
  DOWNLOAD_BOOST_TIMEOUT (which is now 600 seconds)
Call Stack (most recent call first):
  CMakeLists.txt:547 (INCLUDE)

-- Configuring incomplete, errors occurred!

如果這樣的話,那我們wget單獨下載boost:

#進入boost目錄
cd /usr/local/boost

#wget
sudo wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

#解壓
sudo tar -xvzf boost_1_59_0.tar.gz

然后繼續執行之前的cmake

sudo cmake . -DWITH_DEBUG=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost \
-DCMAKE_INSTALL_PREFIX=/Users/tal/data0/dev_mysql/build_out \
-DMYSQL_DATADIR=/Users/tal/data0/dev_mysql/build_out/data

最好將整個dev_mysql目錄的權限更改為當前用戶,不要root。且sudo設置為不輸入密碼。

以上,就編譯好了。接下來開始配置Clion:

將/Users/tal/data0/dev_mysql/mysql-5.7.30的MySQL源碼引入。

然后進入Clion的配置型:將之前cmake編譯的參數放到CMake options中

填寫完之后Apply ok后,返回代碼界面:

在命令里周到mysqld,然后點擊修改配置[Edit Configura...],對命令參數進行配置:

對mysqld命令追加參數: --defaults-file=/Users/tal/data0/dev_mysql/build_out/dev_my.cnf

dev_my.cnf參考內容:

[mysqld]
log-error=/tmp/dev_mysql_log.err
basedir=/Users/tal/data0/dev_mysql/build_out/
datadir=/Users/tal/data0/dev_mysql/build_out/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
socket=/Users/tal/data0/dev_mysql/build_out/mysql.sock

[mysql]
# 數據庫默認字符集
default-character-set=utf8mb4
socket=/Users/tal/data0/dev_mysql/build_out/mysql.sock

之后就可以進行debug了:點擊debug啟動mysql,第一次編譯會比較慢,耐心等待下。

 

啟動之后如下:

 

看下端口,是否成功啟動了:

lsof -i:33060
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
mysqld  39231  tal   13u  IPv6 0xb98aab9dd3abf795      0t0  TCP *:33060 (LISTEN)

然后我們連接客戶端試試:

cd /Users/tal/data0/dev_mysql/build_out
./bin/mysql -uroot --port=33060 --socket=/Users/tal/data0/dev_mysql/build_out/mysql.sock

連接成功后就可以進行斷點調試了。 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM