[MySQL]-主从同步实战-系统OOM
森格 | 2023年1月
本文主要描述了在主从同步过程中,主库非人为重启导致的主从瞬间中断情况的排查及解决。
文章目录
- [MySQL]-主从同步实战-系统OOM
- 一、问题发现
- 1.1 背景
- 1.2 问题发现
- 二、问题分析
- 2.1 MySQL日志
- 2.2 系统日志
- 三、问题解决
一、问题发现
1.1 背景
两台机子做主从同步,主库业务使用,从库供测试使用,使用脚本检测主从状态,每隔10min检测一次,若Slave_IO_Running、Slave_SQL_Running状态不为YES则发出报警到企微。
1.2 问题发现
偶然发送主从同步告警失败的通知,登录从库检查时,主从又恢复正常了,频率大概1-2天一次,所谓,“事出反常必有妖”。
既然发现了奇怪之处,我们也不能让它老是这样,下面一起看下怎么解决的。
二、问题分析
2.1 MySQL日志
拿到问题我们去拿MySQL的日志分析下,会发现这样一段内容:
不难看出主从同步的偶发告警是由于主库的内存不够用了,被系统不正常重启了。
2.2 系统日志
知道是主库被不正常重启后,我们去查看下Linux的系统日志,是否是因为out of memory(OOM)导致的
grep -i "out" /var/log/messages
经过查看,果然发生了内存不够用,我们再来看下更详细的信息:
既然问题的原因我们找到了,下面我们就思考下如何解决该问题。
三、问题解决
对于MySQL的Innodb来说,我们通常至少分配系统内存的50%给Innodb,留出一部分给系统其他应用去使用,关于Innodb的结构我们可以参照文章。
主库之前的Innodb的内存为系统内存的70%,对于这种情况显示是有点高了。所以我们在这里考虑两方面去解决问题:
- 1)参数调整:
- 最大连接数:适当降低连接数。
- innodb_buffer_pool_size:适当降低Innodb的内存大小。
- 2)实例拆分:考虑将一个实例拆分,减轻一台机器的使用压力。
如上解决方案如有不妥之处,敬请各位指正。