0%

准备工作(mac 下编译 & 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
~/.bashrc~/.bash_profile/etc/profile/etc/bashrc 

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

  1. 升级xcode 到最新
    1
    lldb --versionlldb-1001.0.12.1  Swift-5.0 

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

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

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

  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. 下断点调试
    最后