作者:胡呈清
爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
公司大佬出的考核题中有个有意思的问题:
已知:MySQL 的内部两阶段提交,是为了解决 binlog 和 redo log 的一致性(在 crash recovery 的过程中, 如果发现某个事务的 redo log 已经完成 prepare 阶段, 但未完成 commit,那么会验证该事务是否在 binlog 中,如存在,则进行提交,否则进行回滚)。
又已知:Xtrabackup 在恢复备份后,会进行类似于 crash recovery 的动作(将备份的 redo log 的内容回放到数据中, 并对事务进行提交/回滚),那么 Xtrabackup 为什么不需要备份 binlog 文件?
想了一下好像不是能一句话说清楚的,我来尝试解答下。
答:
备份时全局锁阶段做的操作:
2020-08-17T09:58:36.167905+08:00 2116 Query FLUSH TABLES WITH READ LOCK
2020-08-17T09:58:36.490928+08:00 2116 Query SHOW VARIABLES
2020-08-17T09:58:36.498670+08:00 2116 Query SHOW SLAVE STATUS
2020-08-17T09:58:36.499435+08:00 2116 Query SHOW MASTER STATUS
2020-08-17T09:58:36.499747+0

博客探讨了Xtrabackup在备份时如何确保数据和binlog位点一致性,以及在恢复过程中为何不需要处理prepare状态的事务,从而避免备份binlog的必要性。
最低0.47元/天 解锁文章
1597

被折叠的 条评论
为什么被折叠?



