windows系统mysql调试之路
准备
源码
编译 MySQL 的源码非常简单,但是中间也有几个坑,如果能绕过这几个坑,在本地调试 MySQL 是一件很容易的事(当然能调试源码是一回事,能看懂源码又是另一回事了)。
我的环境是 Windows 10 x64,系统上安装了 Visual Studio 2012,如果你的开发环境和我不一样,编译步骤可能也会不同。
在开始之前,首先要从官网下载 MySQL 源码(下载地址):
cmake
CMake:CMake 本身并不是编译工具,它是通过编写一种平台无关的 CMakeList.txt 文件来定制编译流程的,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程;
安装时,选择添加环境变量;如果没有环境变量,可以手动添加bin目录到环境变量Path中;
Bison
Bison:MySQL 在执行 SQL 语句时,必然要对 SQL 语句进行解析,一般来说语法解析器会包含两个模块:词法分析和语法规则。词法分析和语法规则模块有两个较成熟的开源工具 Flex 和 Bison 分别用来解决这两个问题。MySQL 出于性能和灵活考虑,选择了自己完成词法解析部分,语法规则部分使用了 Bison,所以这里我们还要先安装 Bison。Bison 的默认安装路径为 C:\Program Files\GnuWin32,但是千万不要这样,一定要记得选择一个不带空格的目录,譬如 C:\GnuWin32 要不然在后面使用 Visual Studio 编译 MySQL 时会卡死;
需要手动添加bin目录的Path环境变量
Visual Studio
Visual Studio:没什么好说的,Windows 环境下估计没有比它更好的开发工具了吧。
openssl
openssl该网站提供了一个编译完成的OpenSSL安装包,建议下载下载1.1.0版本的installer,light后缀代表的是安装器中没有包含头文件和lib链接文件,这一点需要注意.
需要手动添加如下配置环境变量如下:
- 配置环境变量OPENSSL_ROOT_DIR D:\workspace\OpenSSL-Win32-1.0.1
- 配置环境变量 OPENSSL_INCLUDE_DIR D:\workspace\OpenSSL-Win32-1.0.1\include
- 配置环境变量OPENSSL_CRYPTO_LIBRARY D:\workspace\OpenSSL-Win32-1.0.1\lib
生成visual studio工程
D:\mysql-8.0.26> mkdir project
D:\mysql-8.0.26> cd project
D:\mysql-8.0.26> cmake -DDOWNLOAD_BOOST=1 -DWITH_BOOST="C:/boost" -G "Visual Studio 16 2019" ..
# 如果boost已经下载完成,可以使用以下命令
D:\mysql-8.0.26> cmake -DWITH_BOOST="C:/boost" -G "Visual Studio 16 2019" ..
cmake 的 -G 参数用于指定生成哪种类型的工程文件,这里是 Visual Studio 2019,可以直接输入 cmake -G 查看支持的工程类型。如果没问题,会在 project 目录下生成一堆文件,其中 MySQL.sln 就是我们要用的工程文件,使用 Visual Studio 打开它。
编译
打开 MySQL.sln 文件,会在 Solution Explorer 看到 758 个项目,其中有一个叫 ALL_BUILD,这个时候如果直接编译,编译会失败,在这之前,我们还要对代码做点修改:
- 打开 sql\mysqld.cc 文件的第 6570 行,将assert(0) 改成assert(1),要不然调试时会触发断言
- 如果有文件编译报错,需要将其编码方式更换为Unicode(UTF-8 带签名)
现在我们可以编译整个工程了,选中 ALL_BUILD 项目,Build,然后静静的等待 5 到 10 分钟,如果出现了 Build: 130 succeeded, 0 failed 这样的提示,那么恭喜,你现在可以尽情的调试 MySQL 了。
运行
启动mysqld项目,启动参数为–initialize-insecure --console,关闭,再次使用 --console启动