准备工作
源码及依赖下载
MySQL源码:在~/Documents/mysql-server路径下执行:
git clone https://github.com/mysql/mysql-server.git
根据需要切换到对应tag分支,本文以5.7.23分支的MySQL为例。
boost源码:https://www.boost.org/users/history/version_1_59_0.html下载到目录:
~/Documents/boost_1_59_0
每个分支所依赖的boost版本可能不一样,编译时会提示当前分支所依赖boost版本,5.7.23对应1.59.0。
新建路径
新建如下路径作为MySQL启动时存放数据的路径:
~/Documents/mysql-data/mysql-server/data
编译
步骤1:
cmake -DCMAKE_INSTALL_PREFIX=~/Documents/mysql-data/mysql-server \
-DMYSQL_DATADIR=~/Documents/mysql-data/mysql-server/data \
-DSYSCONFDIR=~/Documents/mysql-data/mysql-server \
-DMYSQL_UNIX_ADDR=~/Documents/mysql-data/mysql-server/data/mysql.sock \
-DWITH_DEBUG=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=~/Documents/boost_1_59_0
步骤2:
make -j 4
步骤3:
make install -j 4
如果中途提示需要安装相关依赖,请自行通过brew或者下载源码编译安装。
编译完成后,需要对数据库进行初始化:
cd ~/Documents/mysql-data/mysql-server/bin &&
./mysqld --basedir=~/Documents/mysql-data/mysql-server --datadir=~/Documents/mysql-data/mysql-server/data --initialize-insecure --user=root
--initialize-insecure参数执行初始化后,默认root@localhost的密码为空密码
由于编译时,添加了
-DMYSQL_UNIX_ADDR=~/Documents/mysql-data/mysql-server/data/mysql.sock
则需要在my.cnf添加:
socket=~/Documents/mysql-data/mysql-server/data/mysql.sock
至此命令行即可启动mysql服务器:
cd ~/Documents/mysql-data/mysql-server/bin &&
./mysqld --defaults-file=/etc/my.cnf --basedir=~/Documents/mysql-data/mysql-server --datadir=~/Documents/mysql-data/mysql-server/data
--defaults-file选项必须放在第一个位置,否则MySQL启动会报错
服务端启动参数可以配置在/etc/my.cnf中:
[mysqld]
port = 3306
server-id = 100
socket=~/Documents/mysql-data/mysql-server/data/mysql.sock
log-bin = mysql-bin
log-slave-updates = 1
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_buffer_pool_size = 2G
innodb_log_file_size = 128M
auto_increment_increment = 2
auto_increment_offset = 2
skip-host-cache
skip-name-resolve
#general_log_file=BASE/mysql.log
general_log=1
Clion中启动MySQL
配置值和命令行基本一致。
配置Debug选项
Clion -> Preferences -> Build,Execution,Deployment中CMake选项中:
配置启动选项
Target和Executable均选择mysqld。
在编译完成后,Clion中即可启动调试程序。
在Sierra系列的Mac下,需要在/etc/hosts文件中加入:
127.0.0.1 localhost