目前有很多文章描述如何源码调试MySQL,主要过程是通过源码编译一个Debug版的MySQL出来,然后使用gdb工具进行调试。
关于如何编译一个Debug的MySQL,过程比较繁琐,下载源码,安装c/c++开发环境,安装cmake等等,很容易出错,并且可能编译出来的版本与官方发行的版本,在编译选项和参数上存在不一致。
本文介绍一种更加简便的调试MySQL的方法。
一、下载MySQL Linux Generic版本
MySQL Linux Genric版本,解压即可使用,它的二进制文件mysqld本身包含符号表等调试信息,省去了我们自己编译MySQL Debug版本的烦恼。
二、安装gdb工具
在Linux上调试源码,gdb工具必不可少,本文示例是在CentOS 7.2系统上测试,安装gdb,通过yum命令安装即可。
yum install gdb
三、初始化MySQL实例
使用MySQL Linux Generic版本初始化数据库,启动MySQL。启动命令通常如下:
/usr/local/mysql/bin/mysqld_safe –defaults-file=/etc/my.cnf &
四、gdb调试MySQL
获取mysqld进程的pid,比如pid为4777gdb /usr/local/mysql/bin/mysqld 4777设置断点,比如在mysql_execute_command函数入口处设置断点,b mysql_execute_command在另一个终端连接到MySQL,执行SQL,比如:select * from tb1;在gdb会话终端,停在断点处,在gdb命令行执行命令:p thd->m_query_string,可以看到断点处,thd变量内部的成员变量记录着当前正在执行的SQL语句:select * from tb1。附图: