MySQL源码之-调试环境Xcode
MySQL源码分析导读
为了更好的使用MySQL数据库,从而在数据库架构设计与应用时给出最好的解决方案,从今天开始对MySQL源码进行一些初步的学习和分析。
当然,首先推荐几本书:Pro MySQL , Expert MySQL , mariadb的设计和实现。 另外就是构建阅读和调试环境,今天我们就主要从环境的
构建说起,MAC 下面最完备的IDE就是 Xcode了,接下来我们看一下,如何使用Xcode来进行MySQL的代码阅读和调试工作。
安装必要的软件和调试工具
Xcode IDE安装
AppStore上面搜索 Xcode,然后下载安装即可。
安装gdb 调试器
安装 homebrew
官方文档: http://brew.sh/
安装 gdb 并签名,具体步骤可以baidu或者google ,附上一个教程
安装 cmake 工具
mysql的编译是采用的cmake ,官网直接下载安装即可:
cmake 官网下载
准备MySQL源码
推荐Percona 版本或者Mariadb
Percona 源码 下载链接.
Mariadb 源码 下载链接 .
构建 Xcode 工程文件,并进行预编译
我们以percona-server-5.6.24为例:
1 | cd percona-server-5.6.24 |
5.7 需要下载 boost 库, 可以在 cmake 的时候添加如下选项
1
2
# -DDOWNLOAD_BOOST=1 -DWITH_BOOST=~/Application/libs/boost
cmake . -G "Xcode" -DWITH_DEBUG=1 -DWITH_TOKUDB_STORAGE_ENGINE=OFF -DWITHOUT_TOKUDB_STORAGE_ENGINE=ON -DCMAKE_INSTALL_PREFIX=/Users/ruiaylin/Documents/MySQL/percona-server-5.7.14/work -DDOWNLOAD_BOOST=1 -DWITH_BOOST=~/Applications/libs/boost_1_59_0
注意: 5.7.19 版本需要将RocksDB引擎排除, 否则无法正常build.
1 | cmake . -G "Xcode" -DWITH_DEBUG=1 -DWITH_TOKUDB_STORAGE_ENGINE=OFF -DWITHOUT_TOKUDB_STORAGE_ENGINE=ON -DWITH_ROCKSDB_STORAGE_ENGINE=OFF -DWITHOUT_ROCKSDB_STORAGE_ENGINE=ON -DCMAKE_INSTALL_PREFIX=/Users/ruiaylin/Development/c/percona5719/work -DDOWNLOAD_BOOST=1 -DWITH_BOOST=~/Applications/libs/boost_1_59_0 |
cmake 之后,会生成一个 xcode的工程文件, 使用xcode 打开就可以把mysql工程加入到 xcode了。
5.7 问题
工程文件加入到 Xcode 之后, 自动创建schema 进行编译会失败. 会报如下错误:
1 | clang: error: no such file or directory: '/Users/ruiaylin/Documents/Source/mysql/percona-server-5.7.15-9/libevent/Debug/libevent.a' |
是因为系统中不存在对应的路径 , 错误原因应该是由于 加入到xcode的时候导致路径改版 , 编译的时候报错.
解决办法很简单: 手动创建目录,并进行编译libevent
./autogen.sh
./configure
make
cp ./.libs/libevent.a Debug/
然后在进行下一步编译 ^_^
编译MySQL源码
在加入了xcode之后,直接点击xcode的编译按钮就可以进行编译和build了,等完成之后会生成对应的二进制可执行文件。
这个过程其实就是手工执行 make , make install的过程。但是 编译完成需要自己手工进行可执行文件的copy工作。
cd work ; mkdir {bin,share,scripts,data}
cp sql/Debug/mysqld work/bin/
cp client/Debug/mysql* work/bin/
cp extra/Debug/my_print_defaults work/bin/
cp -r sql/share/* work/share/
cp -r scripts/* work/scripts/
chmod +x work/scripts/*
cp scripts/*.sql work/share/
cp support-files/*.cnf work/share/
初始化数据库
5.6 :
1 | ./scripts/mysql_install_db --user=ruiaylin --basedir=/Users/ruiaylin/Documents/MySQL/percona-server-5.6.24/work --datadir=/Users/ruiaylin/Documents/MySQL/percona-server-5.6.24/work/data --force |
5.7 :
mysqld --initialize-insecure --user=mysql
Xcode 调试
Xcode中调试 MySQL , 配置三个三个环节变量:
Set the active schema选项[build右侧第二个选项,如图中 mysqld的位置]中选择 mysqld, 然后在同一个列表里面选择编辑schema,
会弹出一个窗口, 点击 RUN , 然后 Arguments Passed On launch 添加三个变量.
--user=ruiaylin
--basedir=/Users/ruiaylin/Documents/MySQL/percona-server-5.6.24/work
--datadir=/Users/ruiaylin/Documents/MySQL/percona-server-5.6.24/work/data
如图所示
my.cnf 放到 /etc下面。
总结
尽情享受吧