
从零开始学习MySQL调试跟踪(2)
- 1. 启用coredump
- 2. 制造一个coredump场景
- 3. 真实故障场景分析跟踪
上一篇文档介绍了如何构建gdb跟踪调试环境,本文介绍如何根据错误日志信息,跟踪定位问题可能的原因,以及如何利用coredump文件查找问题线索。
1. 启用coredump
程序运行过程中可能会异常终止或崩溃,OS会把程序挂掉时的内存状态记录下来,写入core文件,这就叫 coredump,通过gdb结合core文件可以方便地进行调试。
利用core文件中保留的异常堆栈文件,能够帮助研发同学更快定位问题。因此,如果某些故障断断续续会出现,建议阶段性开启coredump功能。
想要开启coredump,需要先修改OS层的几个设置:
同时,将这些修改持久化到相应文件中(假定MySQL/GreatSQL服务进程的属主用户是 mysql
):
接下来,修改 my.cnf
配置文件,增加以下两行内容:
然后重启GreatSQL服务进程,即可生效,查询确认下:
这样设置完成后,需要的话会在 datadir
目录下生成core文件。
2. 制造一个coredump场景
我们可以给mysqld进程发送 SIGSEGV(11)
信号,即可模拟出coredump的场景,例如:
这时查看GreatSQL错误日志文件,以及core文件,就会发现有coredump:
在一线的同学,如果需要向研发寻求支持或报告故障时,可以先参考这篇文章 MySQL报障之coredump收集处理流程,需要采集其他几个信息:
- 故障时刻的error log。
- 故障产生的core文件。
- 如果有general log的话,也采集起来(故障时刻往前约1小时或10万行日志)。
- 导致core发生涉及到的表DDL以及相应的SQL语句,有必要的话,可能还要同时提供真实数据(或样例数据)。
3. 真实故障场景分析跟踪
在GreatSQL 8.0.25-15版本(上一个版本)中,InnoDB并行查询功能在特定场景下存在bug,会导致crash,相应的日志见下:
按照上面所说的方法,我们采集了所有相关信息,并能在测试环境重现上述故障。
接下来,我们利用gdb来定位分析问题原因:
有了这些信息,研发同学再去跟踪定位问题根源就会方便很多。
本文简单演示了如何利用core文件去跟踪定位分析可能导致crash的原因,更多有趣实用的方法还有待进一步挖掘,一起探索新世界吧。
文章转载自公众号:GreatSQL社区
