Contents

实验如下:
下载MySQL 5.6.26的源码

https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.26.tar.gz

安装依赖

yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-TermReadKey.x86_64  zlib openssl sshpass bash-completion unzip make gcc gcc-c++ cmake bison-devel  ncurses-devel gdb

编译,注意增加 DEBUG 选项。(cmake的版本要求在2.8.2以上)

cmake \
-DCMAKE_INSTALL_PREFIX=/home/mysql/mysql \
-DMYSQL_DATADIR=/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_DEBUG=1 \
-DMYSQL_UNIX_ADDR=/data/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

make && make install

scripts/mysql_install_db --user=mysql --basedir=/home/mysql/mysql --datadir=/data

源码安装完MySQL之后,mysql用户使用Debug模式启动
mysqld –debug –console &

然后重头戏来了

先找到MySQL的PID

[mysql@mysql ~]$ ps -ef|grep mysqld
mysql    15487     1  0 18:02 pts/0    00:00:01 ./mysqld --debug --console
mysql    15546  1587  0 18:14 pts/0    00:00:00 grep --color=auto mysqld

这时候,tail -f /tmp/mysqld.trace
可以看到,任何在MySQL的操作,调用的函数信息都记录在这个trace文件中.

找到其中任意一行,比如 PROFILING::status_change

使用命令gdb调试.
gdb –pid 15487 –tui

将上述函数打断点.
break PROFILING::status_change

开启另外一个MySQL终端.执行查询,然后进入gdb的断点.

可以看到源码,并且单步执行,打印变量.

看静态的代码一般比较枯燥,用这种方式感觉比较好入门.

同样的方式,也适用于Redis

相关阅读:

MySQL自动化安装部署

Contents