36|备库有延迟怎么办?
俊达
你好,我是俊达。
在 MySQL 高可用架构中,备库延迟一直很重要。备库延迟会带来各种问题。在读写分离架构下,如果备库有延迟,读备库时就可能会读到陈旧的数据,影响业务。当主库发生故障,需要切换到备库时,如果备库有延迟,就需要先等备库执行完积压的 Binlog,这会影响业务的可用性。
MySQL 中 Binlog 复制和 Binlog 应用是分开的。使用半同步,或者使用 MGR 架构,也只是保证主库事务提交时,Binlog 同步到了备库。备库上,SQL 线程应用 Binlog 事件后,数据才真正能被访问到。
很多不同的原因会引起备库延迟,这一讲我们就来聊一聊备库延迟的一些原因,以及一些解决方法。
认识备库延迟
怎么查看备库延迟?
怎么判断备库有延迟,最简单的方法就是看 show replica status 中的 Seconds_Behind_Source。如果 Seconds_Behind_Source 大于 0,说明有延迟。但有时候,Seconds_Behind_Source 并不一定可靠。
如果 IO 线程或 SQL 线程中断了,Seconds_Behind_Source 显示为 NULL。
级联复制架构下,一级备库上可能复制有延迟或中断了,但是二级备库上,Seconds_Behind_Source 可能还是正常的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. 备库延迟对MySQL高可用架构的重要性和影响,包括可能导致读取陈旧数据和影响业务可用性。 2. 备库延迟的判断方法,包括查看show replica status中的Seconds_Behind_Source,以及其局限性和计算公式。 3. 判断备库是否执行完所有binlog的方法,包括查看主库Binlog的位点,检查备库上的Relay_Source_Log_File和Exec_Source_Log_Pos,以及使用GTID集合是否一致。 4. MySQL提供的函数SOURCE_POS_WAIT和WAIT_FOR_EXECUTED_GTID_SET,用来等待备库执行进度,以及控制等待时间的参数。 5. 监控数据复制是否运行正常,包括监控IO线程、SQL线程是否都在正常运行,以及关注备库的空间情况。 6. 使用pt-heartbeat工具在主库上定期更新心跳记录的时间戳,然后到备库上计算当前时间和心跳记录时间戳之间的差距,以检查备库延迟。 7. 备库延迟的一些原因,包括主库执行大事务或长时间DDL、表缺少主键和索引、备库上数据库或表被锁定、主库写入并发高导致备库跟不上主库。 8. 使用多线程复制(MTA)来缓解备库延迟,包括配置replica_parallel_workers和replica_parallel_type参数,以及备库如何并行执行BINLOG。 9. 分析备库延迟的原因,并进行解决,包括避免大事务、给表添加主键、处理备库中的锁情况、提升备库性能等方法.
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 运维实战课》,新⼈⾸单¥59
《MySQL 运维实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论