在MySQL中调试MTPower

由于我们MySQL小组开发的MTPower版本极多,到现在为止显得有些混乱,这里推荐大家使用改进的MDB(Multi-threaded Disk Buffer)版本,因为这个版本是在原有版本的基础上改进的版本,MDB性能也是最好的。这个版本在八核服务器/home/robin/bishe/source目录中mysql-6.0.9-alpha目录(可用root用户进入),将整个mysql-6.0.9-alpha文件拷贝到自己的目录中:

[code lang=”shell”]
root@localhost source]# pwd
/home/robin/bishe/source
[root@localhost source]# cp -r mysql-6.0.9-alpha /home/somebody
[root@localhost source]# cd /home/somebody
[root@localhost mysql]# ls -la
total 4
drwxr-xr-x 33 root root 4096 May 4 16:13 mysql-6.0.9-alpha
[/code]

然后改变改变mysql-6.0.9-alpha 的拥有者

[code lang=”shell”]
[root@localhost mysql]# chown -R somebody:somebody mysql-6.0.9-alpha
[/code]

退出超级用户,以用户身份进入

[code lang=”shell”]
[root@localhost mysql]# exit
[/code]

进入到mysql-6.0.9-alpha目录下,配置、编译并安装

[code lang=”shell”]
[liao@localhost mysql]$ cd mysql-6.0.9-alpha/
[liao@localhost mysql-6.0.9-alpha]$
[liao@localhost mysql-6.0.9-alpha]$ ./BUILD/autorun.sh
[liao@localhost mysql-6.0.9-alpha]$ ./configure –prefix=/home/somebody/deploy –with-plugins=mtpower –with-debug=full
[liao@localhost mysql-6.0.9-alpha]$ make
[liao@localhost mysql-6.0.9-alpha]$ make install
[/code]

这里注意几点:

1、./BUILD/autorun.sh是必要的,特别是在MTPower中添加了自己写的C/C++源文件,这一步必不可少;另外若是在此目录下进行第一次编译操作也最好./BUILD/autorun.sh,以后如果还是在此目录下编译或安装都不必再./BUILD/autorun.sh,除非如刚才所说,增删了源文件;

2、–with-plugins=MTPOWER意思是把MTPower编译进mysql并安装,如果是对MTPower进行开发,这个选项肯定要有,默认没有;

3、–with-debug=full 这个选项是调试用的,默认没有(即普通安装,非调试模式)。另外,当我们需要安装MTPower但不需要调试模式时(即–with-debug=full不必写上),还有很重要的一步就是在make之前要吧mysql-6.0.9-alpha/storage/MTPower目录下的Makefile的-O3改成-g,告诉编译器不对MTPower进行优化,否则mtpower会有些难以发现的错误。

4、–prefix=/home/somebody/deploy是设置mysql的安装路径,请务必加上,以免覆盖默认安装目录下的文件。还有一点是安装之后mysql server的启动比较麻烦,如果嫌麻烦,可以配置成–prefix=/home/liao/benchmark/buffer_improved/deploy ,即安装在我的目录下,但需要root权限,即以root用户make install(make install之前的命令用过用户的权限就可以完成)。make install后可以直接进入安装目录运行或调试mysql。据我的经验,这是没有出现什么问题的。

5、在接下来的开发mysql过程中,如果只是增减代码而没有增减文件,每次更改完后不必再/BUILD/autorun.sh和./configure,只需make && make install就可以了。

接下来讲讲如何调试MTPower。如上所述,要对MTPower进行调试,–with-plugins=MTPOWER –with-debug=full必须都要选上,然后再make && make install.
安装完毕后进入到安装目录(这里假设/home/liao/benchmark/buffer_improved/deploy),用ls命令查看。
可以看到有个libexec文件夹,该文件夹下面有个mysqld文件,这个就是服务器端二进制文件,我们要做的就是对这个文件进行调试(调试过程最好用root用户,这样可以避免mysql权限问题)。

如果要设置断点,可以在run -uroot之前设置,比如

(gdb) b ha_mtpower.cc:500 –在ha_mtpower.cc第500行设置断点

(gdb) b ha_mtpower::create –在ha_mtpower类成员函数create中设置断点

另外断点还可以在调试过程中设置。

然后用mysql客户端连接mysql server,

当代码在断点处停止时,就可以进行单步等等之类的调试了,具体可以看gdb使用说明。

另外还可以自己写一些测试程序当作客户端(作为例子可以查看/home/liao/benchmark/buffer_improved/test 目录下的benchmark.c文件),这样就不必每次都在客户端中输入SQL语句了。

文远补充说明:

文远  20:41:22
4.在make install之后,还要执行scripts/mysql_install_db,用于创建数据目录var
文远  20:44:49
cp supoort-files/选一个 /安装目录var/my.cnf,之后在my.cnf中[mysqld]中写入 user = mysqld