今天带来MySQL主从复制延迟原因以及解决方案教程详解
来源:公众号「神谕的暗影长廊」
在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。
虽出现延迟正常,但是否需要关注,则一般是由业务来评估。
如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注。
简单概述一下复制逻辑:
1、主库将对数据库实例的变更记录到binlog中。
2、主库会有binlog dump
线程实时监测binlog的变更并将这些新的events推给从库(Master has sent all binlog to slave; waiting for more updates
)
3、从库的IO Thread
接收这些events,并将其记录入relaylog。
4、从库的SQL Thread
读取relaylog的events,并将这些events应用(或称为重放)到从库实例。
上述为默认的异步复制逻辑,半同步复制又有些许不同,此处不再赘述。
此外,判断从库有延迟是十分简单的一件事:
在从库上通过SHOW SLAVE STATUS
检查Seconds_Behind_Master
值即可。
产生延迟的原因及处理思路
主库DML请求频繁(tps较大)
即主库写请求较多,有大量insert、delete、update并发操作,短时间产生了大量的binlog。
【原因分析】
主库并发写入数据,而从库SQL Thread
为单线程应用日志,很容易造成relaylog堆积,产生延迟。
【解决思路】
做sharding,通过scale out打散写请求。或考虑升级到MySQL 5.7+,开启基于逻辑时钟的并行复制。
主库执行大事务
MySQL8安装Installer版的图文教程
下一篇:Mysql如何在linux中实现定时备份