高可用篇|课后题答疑
俊达

你好,我是俊达。我们继续看最后一章的课后题。
第 34 讲
问题:MySQL 主备数据复制默认是异步的。如果主库执行成功,但 binlog 还没来得及发送给备库,可能会存在备库的事务比主库少的情况。反过来,有没有可能出现备库事务比主库多的情况呢(不考虑业务在备库上写入数据的情况)?
@叶明 在评论区提供了这个问题的解答。
如果 sync_binlog 没有设置成 1,那么就有可能出现备库事务比主库多的情况。

看一下上面这个简化了的事务提交的流程图,事务提交时,会经过三个关键的步骤。
Binlog Flush:将 Binlog Event 从 Binog Cache 写到 Binlog 文件中。注意,这个步骤只是将 Event 写到了 Binlog 文件中,而 Binlog 文件本身还有文件系统 Cache,如果操作系统异常重启,这时 Binlog 文件的内容可能会丢失。
如果 sync_binlog 没有设置为 1,那么 Binlog Flush 后,就会调用 update_binlog_end_pos 函数,唤醒 Binlog Dump 线程。Binlog Dump 线程这时就能将最新的 Event 发送给备库了。如果 Dump 线程已经将 Event 发送给了备库,但是主库所在的服务器异常崩溃了,事务在主库上还没有完成提交,就出现了备库事务比主库多的情况。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结

1. MySQL主备数据复制默认是异步的,可能出现备库事务比主库多的情况,需要设置sync_binlog为1来避免此问题。 2. 使用pt-table-checksum来检查主备数据的一致性,而不是根据seconds_behind_source来判断。 3. 备库在运行过程中会实时更新一些位点信息,异常崩溃可能导致位点信息没有及时更新,影响备库复制。 4. 如果没有开启GTID,但使用了多线程复制,需要进行MTS恢复的操作,解决可能存在的事务Gap,然后才能恢复数据复制。 5. 设计备份调度管理系统需要管理备份策略、备份任务和恢复演练。 6. 异常检测机制和切换触发机制是关键的自动切换程序考虑的方面。 7. 切换的步骤和记录切换日志对于保证数据一致性和事后分析非常重要。 8. 监控系统的容错能力和告警通道的有效性是监控系统自身故障时需要考虑的问题。 9. 使用GDB的non-stop模式可以实现在调试一个线程时,其他线程保持运行状态的需求。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 运维实战课》,新⼈⾸单¥59
《MySQL 运维实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论