如何在 Mac下用 Clion 调试 MySQL 源码

系统环境

macOS: 10.13.6
MySQL: 5.7.32

下载并安装Clion

Clion是一款强大的C/C++ IDE 工具,与IntelliJ IDEA、PyCharm一样,都是JetBrains公司的产品,Clion下载地址:https://www.jetbrains.com/clion/

下载MySQL

我们使用的MySQL版本为5.7.32,下载地址:https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.32.tar.gz

导入MySQL源码

点击open选择源码路径并导入源码

导入之后Clion会自动进行编译,有可能会报错,先不去管它。

配置Clion

  • 1、配置CMake,如下图所示


CMake配置如下:

-DWITH_DEBUG=1
-DWITH_BOOST=/path/to/mysql-5.7.32/boost


1、由于我们下载的MySQL源文件中包含了boost文件,所以此处的-DWITH_BOOST指向我们解压后的源文件目录下的boost目录就可以了;
2、build directory是编译后文件的保存路径,保持默认就可以,编译时会自动帮我们在源文件目录下创建该目录。

  • 2、运行CMake
    点击 File -> Reload CMake Project


运行时有报错,ssl版本太低,最低版本要求1.1.1


用如下方法升级ssl

brew install [email protected]
cd /usr/local/opt
unlink openssl
ln -s ../Cellar/[email protected]/1.1.1c openssl

:我装的openssl版本是1.1.1c,有小伙伴装的其它版本的,需要把软连接改一下哈。

升级前后对比一下


升级前
升级后

测试一下

$ openssl version
OpenSSL 1.1.1c  28 May 2019

升级完成后,没遇到其它问题,运行成功。

  • 编译mysqld
    创建数据目录
mkdir -p /path/to/mysql-5.7.32/buidout/data

创建配置文件my.cnf

cd /path/to/mysql-5.7.32/
vim my.cnf
[mysqld]  
log-error=log.err
datadir=/path/to/mysql-5.7.32/buidout/data
pid-file=user.pid
skip-grant-tables
innodb_file_per_table=1
port=3306

[client]
# 客户端来源数据的默认字符集
default-character-set = utf8mb4
[mysqld]
# 服务端默认字符集
character-set-server=utf8mb4
# 连接层默认字符集
collation-server=utf8mb4_unicode_ci
[mysql]
# 数据库默认字符集
default-character-set = utf8mb4

点击右上角的 Edit Configurations...

找到mysqld,并配置Program arguments

--defaults-file=/path/to/mysql-5.7.32/my.cnf
12.png

保存配置后,点击debug按钮(下图箭头所指),进行编译和初始化mysql数据目录


编译时报错如下

/Users/zhengzhou/Documents/cpp_workspace/mysql-5.7.32/storage/innobase/os/os0event.cc:382:24: error: use of undeclared identifier 'CLOCK_MONOTONIC'
            if (clock_gettime(CLOCK_MONOTONIC, &tp) == -1) {
                              ^

经google,是缺少/usr/include目录导致的,在命令行输入以下命令安装/usr/include目录

xcode-select --install

运行完成后,发现/usr/include目录已经存在了,继续编译,成功了,且msyqld已经启动了。

  • 连接mysql
    在命令行输入mysql -uroot -h127.0.0.1,回车后发现进入了mysql shell,连接成功。
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.01 sec)

你可能感兴趣的:(如何在 Mac下用 Clion 调试 MySQL 源码)