文章目录
  1. 1. MySQL源码分析导读
  2. 2. 安装必要的软件和调试工具
    1. 2.1. Xcode IDE安装
    2. 2.2. 安装gdb 调试器
    3. 2.3. 安装 cmake 工具
  3. 3. 准备MySQL源码
  4. 4. 构建 Xcode 工程文件,并进行预编译
  5. 5. 编译MySQL源码
  6. 6. 初始化数据库
  7. 7. Xcode 调试
  8. 8. 总结

MySQL源码分析导读

为了更好的使用MySQL数据库,从而在数据库架构设计与应用时给出最好的解决方案,从今天开始对MySQL源码进行一些初步的学习和分析。
当然,首先推荐几本书:Pro MySQL , Expert MySQL , mariadb的设计和实现。 另外就是构建阅读和调试环境,今天我们就主要从环境的
构建说起,MAC 下面最完备的IDE就是 Xcode了,接下来我们看一下,如何使用Xcode来进行MySQL的代码阅读和调试工作。

安装必要的软件和调试工具

Xcode IDE安装

AppStore上面搜索 Xcode,然后下载安装即可。

安装gdb 调试器

  1. 安装 homebrew

    官方文档: http://brew.sh/

  2. 安装 gdb 并签名,具体步骤可以baidu或者google ,附上一个教程

    http://ntraft.com/installing-gdb-on-os-x-mavericks/

安装 cmake 工具

mysql的编译是采用的cmake ,官网直接下载安装即可:
cmake 官网下载

准备MySQL源码

推荐Percona 版本或者Mariadb
Percona 源码 下载链接.
Mariadb 源码 下载链接 .

构建 Xcode 工程文件,并进行预编译

我们以percona-server-5.6.24为例:

1
2
3
4
cd  percona-server-5.6.24
mkdir work
// 源码目录执行,由于tokudb目前无法支持mac,所以要关闭编译
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.6.24/work

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 添加三个变量.

active schema

--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

active schema

如图所示

my.cnf 放到 /etc下面。

总结

尽情享受吧

文章目录
  1. 1. MySQL源码分析导读
  2. 2. 安装必要的软件和调试工具
    1. 2.1. Xcode IDE安装
    2. 2.2. 安装gdb 调试器
    3. 2.3. 安装 cmake 工具
  3. 3. 准备MySQL源码
  4. 4. 构建 Xcode 工程文件,并进行预编译
  5. 5. 编译MySQL源码
  6. 6. 初始化数据库
  7. 7. Xcode 调试
  8. 8. 总结