1. 背景
随着系统上线后业务量的增长,对数据库的压力日益增加,2018.4.23运维反馈一台自建数据库mysql忽然不能访问了。
2. 排查问题
系统上线后,业务已经运行了一段时间了,都比较正常。排查服务端错误日志,发现如下信息:
说明数据库已经失联了,可能是数据挂了。继续排查,查看mysql error log日志,发现如下信息:
3. 故障分析
分析mysql error log错误日志,是数据库的I/O失败了,log进而说明了错误的几种可能性,可能是触发了MySQL的某个Bug。网上找了一下,有人遇到过类似问题。
分析结果: 这是mysql的一个bug,MySQL有个innodb_buffer_pool_size配置参数,用来缓存索引和数据,如果它用完了,会去征用磁盘空间,对磁盘进行I/O操作,mysql的这个bug正是在频繁I/O时,有概率被触发。
4. 解决方案
- 修改innodb_buffer_pool_size大小,原来使用默认值为8M,DBA建议为物理内容的80%,这个值小可能会导致频繁IO读写,现在的解决方式是调大了这个池大小为2G。
- 升级数据库版本到5.7.24 GA。