最近花了几天的时间搭建和编译MySQL 环境
因为电脑之前安装过很多软件, 很多环境已经有一些混乱, 给编译和debug MySQL 带来很多坑。 踩过的坑,远超过网上的描述,还好在同事的帮助下和自己摸索,慢慢搞定。
前期准备:
安装软件
1
brew install autoconf automake m4 libtool make cmake bison gcc openssl
检查/etc/hosts
检查/etc/hosts 里面是否有localhost, 如果没有,增加127.0.0.1 localhost localhost.localdomain 到localhost, 否则, 在debug mysql 时,会出现 protobuffer 找不到host 错误。1
sudo vi /etc/hosts
检查环境变量
将一些环境变量 CPPFLAGS/LDFLAGS/LIBRARY_PATHLD_LIBRARY_PATH/LIBTOOL/LIBTOOLIZE/CC/GCC 清空掉。
之前,因为安装Anaconda2 导致系统有一大堆变量。 另外因为编译过其他软件,修改了大量的编译相关的环境变量, 这些都给我们埋坑。
检查一下文件
1 | ~/.bashrc |
找到这些环境设置文件,将这些环境变量给注释掉。
- 升级xcode 到最新
1 | lldb --version |
xcode 如果没有升级到最新, 编译时会出现protobuffer 编译错误。
编译:
- 下载源码
1 | git clone https://github.com/mysql/mysql-server |
可以选择一个稳定版, 比如8.0.16
clion 导入 mysql 代码
配置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
- 初始化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 目录, 可以根据实际情况进行设置
- 下断点调试
最后, 打开sql/main.cc, 下断点 既可以调试