使用mysql debug模式,可以分析每个操作的详细过程。
要使用mysql的debug模式,需要启动mysql的debug版
1 .启动mysql debug版,把mysqld文件改成mysqld-debug启动。
如下

用mysqld_safe启动的话,在启动时加入–debug

2.开启debug 模式
d: 表示开启debug模式
t: 表示启用函数调用debug模式
i: 在trace文件中加入pid
o,/tmp/mysqld.trace 表示trace的文件
mysql [localhost:8032] {root} ((none)) > set global debug=‘d:o,/tmp/mysqld.trace’;
Query OK, 0 rows affected (0.03 sec)
mysql [localhost:8032] {root} ((none)) > create table test.test10 (id bigint);
Query OK, 0 rows affected (0.14 sec)
查看trace文件,可以看到创建过程的一些细节。

如果需要查看更详细的函数调用
mysql [localhost:8032] {root} ((none)) > set global debug=‘d:o,/tmp/mysqld.trace:t,40’;
Query OK, 0 rows affected (0.00 sec)
mysql [localhost:8032] {root} ((none)) > create table test.test11 (id bigint);
Query OK, 0 rows affected (0.12 sec)

如果需要输入源代码文件名和对应的行号,
mysql [localhost:8032] {root} ((none)) > set global debug=‘d:o,/tmp/mysqld.trace:t,40:F:L’;
Query OK, 0 rows affected (0.00 sec)
mysql [localhost:8032] {root} ((none)) > create table test.test12(id bigint);
Query OK, 0 rows affected (0.14 sec)

可以更详细的知道调用哪个文件的哪个函数。这样就可以分析源码了解操作的详细过程了。当然,要分析源码,用gdb跟踪执行过程才能更清晰掌握,光看源码不一定能看懂。
从以上的实践中,我们可以了解dbug包的用法,可以根据trace文件了解mysql内部的一些过程。也可以了解一些相关的机制,碰到棘手或查不到答案的问题也可以看看源码。
参考:https://dev.mysql.com/doc/refman/8.4/en/dbug-package.html




