mysql在类linux环境下的编译、调试相信大家都应该有所了解,和其他的GNU工具没有两样:configure、make、gdb。。。 当然具体的参数选项可能会很多,可以参考官方文档。
本文试就windows开发环境下的mysql编译调试做些表述:
用到的工具: vs2005 bison cmake
1. 在WIN下配置好bison cmake的环境变量,注意安装这两个工具的路径尽量不要带有空格
2. 参照$mysql_src\win\README,执行vs2005所对应的build-vs8.bat, 生成相应的solution文件等等如图所示:
3. 在vs中可以打开生成的solution文件:
4. source目录中比较重要的几个目录:
BUILD 各个平台的编译脚本,可以关注 compile-pentium-debug
client 平时我们经常会用到的mysql客户端工具,比如mysql mysqldump
mysys 系统编程接口的封闭,cross-platform:)
storage 这个是核心,存储引擎嘛。重点可以看innodb myisam和example,特别是example,专门是为程序员demo的
sql 这个最重要了,mysqld所在哈
5. 需要手工修改一下sql_locale.cc的编码,另存为UTF-8,这样子编译mysqld的时候才可以过,详情可参考mysql bug36281
6. 现在编译mysqld可以成功了,试着运行下,还有问题:
于是到mysqld.cc的4267行看了下是个DBUG_ASSERT语句,懒的细看,直接注掉,重build,没问题鸟终于。。。
7. 剩下的就是按照出错提示,创建目录sql\data
8. 查看mysql-5.1.45\sql\data\t-wuyun.err错误LOG: Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist。 拷贝mysql-5.1.45\win\data\mysql到mysql-5.1.45\sql\data\mysql,再次运行mysql- 5.1.45\sql\debug\mysqld.exe,终于彻底静悄悄了~~~
9. 终于可以单步debug了:
mysql-5.1.45\sql\debug\mysqld.exe –debug –standalone 先启动好mysql server
在VS中attach到该进程,如图所示
下个断点,再启个mysql客户端请求一下:
mysql-5.1.45\client\debug\mysql.exe -uroot -p
mysql>show authors;
我们最喜爱的画面终于出现鸟:
10. 收尾工作: mysql-5.1.45\client\debug\mysqladmin.exe -uroot -p shutdown
11. 现在想干什么想了解什么,就可以为所欲为了~~~比如了解select/insert/update/delete的数据库内部详细实现流程,甚至是mysql的执行计划选择,innodb的细节等等。
最后唠叨一句: 能用GDB调试学习就用GDB吧,在WINDOWS下配置真的不容易,关键是GDB的速度真不是盖的 : )
参考资料:
http://dev.mysql.com/doc/mysql-sourcebuild-excerpt/5.0/en/windows-source-build-cmake.html
http://bugs.mysql.com/bug.php?id=36281
http://forge.mysql.com/wiki/Building_MySQL_on_Windows