Mac 下 clion 单机debug mysql

最近花了几天的时间搭建和编译MySQL 环境

因为电脑之前安装过很多软件, 很多环境已经有一些混乱, 给编译和debug MySQL 带来很多坑。 踩过的坑,远超过网上的描述,还好在同事的帮助下和自己摸索,慢慢搞定。

前期准备:

  1. 安装软件

    1
    brew install autoconf automake m4 libtool make cmake bison gcc openssl
  2. 检查/etc/hosts
    检查/etc/hosts 里面是否有localhost, 如果没有,增加127.0.0.1 localhost localhost.localdomain 到localhost, 否则, 在debug mysql 时,会出现 protobuffer 找不到host 错误。

    1
    sudo vi /etc/hosts
  3. 检查环境变量
    将一些环境变量 CPPFLAGS/LDFLAGS/LIBRARY_PATHLD_LIBRARY_PATH/LIBTOOL/LIBTOOLIZE/CC/GCC 清空掉。
    之前,因为安装Anaconda2 导致系统有一大堆变量。 另外因为编译过其他软件,修改了大量的编译相关的环境变量, 这些都给我们埋坑。

检查一下文件

1
2
3
4
~/.bashrc
~/.bash_profile
/etc/profile
/etc/bashrc

找到这些环境设置文件,将这些环境变量给注释掉。

  1. 升级xcode 到最新
1
2
3
lldb --version
lldb-1001.0.12.1
Swift-5.0

xcode 如果没有升级到最新, 编译时会出现protobuffer 编译错误。

编译:

  1. 下载源码
1
git clone https://github.com/mysql/mysql-server

可以选择一个稳定版, 比如8.0.16

  1. clion 导入 mysql 代码

  2. 配置cmake

cmake 配置

1
-DCMAKE_INSTALL_PREFIX="/Users/longda/work/data/mysql/mysql" -DSYSCONFDIR="/Users/longda/work/data/mysql/mysql"  -DMYSQL_DATADIR="/Users/longda/work/data/mysql/data"   -DWITH_DEBUG=1                -DWITH_DEBUG_SYNC=1      -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O0 -g" -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O0 -g" -DINSTALL_LAYOUT=STANDALONE        -DMYSQL_MAINTAINER_MODE=0          -DWITH_EMBEDDED_SERVER=0           -DWITH_EXTRA_CHARSETS=all          -DDEFAULT_CHARSET=utf8mb4          -DWITH_MYISAM_STORAGE_ENGINE=1     -DWITH_INNOBASE_STORAGE_ENGINE=1   -DWITH_PARTITION_STORAGE_ENGINE=0  -DWITH_CSV_STORAGE_ENGINE=0        -DWITH_ARCHIVE_STORAGE_ENGINE=0    -DWITH_BLACKHOLE_STORAGE_ENGINE=0  -DWITH_FEDERATED_STORAGE_ENGINE=0  -DWITH_PERFSCHEMA_STORAGE_ENGINE=0 -DWITH_EXAMPLE_STORAGE_ENGINE=0    -DWITH_TEMPTABLE_STORAGE_ENGINE=1  -DBUILD_TESTING=ON                 -DUSE_CTAGS=0                      -DENABLE_DTRACE=0                  -DENABLED_PROFILING=1              -DENABLED_LOCAL_INFILE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/Users/longda/work/company/taobao/tools/boost/ -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2r -DMYSQL_SERVER_SUFFIX="rds-dev"
## 编译:

用 command + f9, 执行编译, 一般情况下 编译是成功的

开始debug

  1. 初始化mysql data 目录
    编译成功后, 在目录cmake-build-debug(或者cmake-build-cmake)下 执行
1
./bin/mysqld --initialize-insecure --basedir=/Users/longda/work/data/mysql/mysq --datadir=/Users/longda/work/data/mysql/mysq/data

以insecure的方式初始化MySQL密码为空

/Users/longda/work/data/mysql/mysq 为mysql 的binary 目录, 可以根据实际情况进行设置

  1. 下断点调试
    最后, 打开sql/main.cc, 下断点 既可以调试