准备工作(mac 下编译 & Debug MySQL)
最近花了几天的时间搭建和编译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~/.bash_profile/etc/profile/etc/bashrc |
找到这些环境设置文件,将这些环境变量给注释掉。
升级xcode 到最新
xcode 如果没有升级到最新, 编译时会出现protobuffer 编译错误。 # 编译:1
lldb --versionlldb-1001.0.12.1 Swift-5.0
下载源码
可以选择一个稳定版, 比如8.0.131
git clone https://github.com/mysql/mysql-server
clion 导入 mysql 代码
配置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)下 执行以insecure的方式初始化MySQL密码为空1
./bin/mysqld --initialize-insecure --basedir=/Users/longda/work/data/mysql/mysq --datadir=/Users/longda/work/data/mysql/mysq/data |
/Users/longda/work/data/mysql/mysq 为mysql 的binary 目录, 可以根据实际情况进行设置下断点调试
最后