最近两天自己负责的一个实例频繁出现crash的情况,分析了日志,大致明白了crash的原因,但是没有定位到具体的SQL,也没有找到很好的规避的办法,因此想在mysql出现crash的时候自动将内存堆栈相关的信息保存到core文件,然后通过gdb分析再结合源码来确定导致mysql crash的根本原因。
因为之前在linux下操作过core文件的设置,因此想当然地通过ulimit -c unlimited打开linux的core文件设置,然后喝茶,静静等待core文件的产生。终于等到实例出现crash,但是core文件并没有如期产生。查了下mysql的官方文档,发现还需要通过 --core-file启动或者将core_file配置到配置文件,然后重启实例。如下图的官方文档所示:
这次涉及到实例重启,多少会影响业务,为了谨慎期间,特地找了个测试环境,按照如下配置进行操作:
1、打开linux的core文件配置
ulimit -c unlimited
2、添加mysql的core_file配置(备注:配置在[mysqld]下面),并重启测试实例
3、模拟mysql的crash场景,执行如下命令