今天收到一台DB机器连接不通的告警,登录服务器发现DB连通性是正常的。怀疑可能是网络抖动导致的误告,查看网络监控进行确认,并没有发现有丢包或者网络延迟的陡增的情况,初步排除网络抖动问题。查看mysql错误日志,发现有mysqld got signal 8的报错,mysql由于某种原因导致mysql出现crash。报错如下:
怀疑是mysql的bug引起,在官网找到了对应的bug,链接如下:
https://bugs.mysql.com/bug.php?id=65663
原因是某个SQL访问分区表的时候,访问分区越界的时候有bug,导致实例crash。如下图所示:
只有version为5.5.23,5.5.24,5.5.25有这个bug,在5.5.26修复了这个bug,而这个DB的版本恰好是5.5.24
通过抓包发现确实有一个使用了分区表的SQL,一出现mysql就crash,分析发现是因为使用的时间分区字段超过了最大值导致。
解决办法:
1、修改SQL
2、添加max分区
3、升级mysql版本