MySQL中,redolog 和 binlog 是如何基于XID字段进行关联的?
  0SnbOly3LC5t 2023年12月10日 30 0


它们有一个共同的数据字段,叫 XID。崩溃恢复的时候,会按顺序扫描 redo log:

  • 如果碰到既有 prepare、又有 commit 的 redo log,就直接提交;
  • 如果碰到只有 parepare、而没有 commit 的 redo log,就拿着 XID 去 binlog 找对应的事务。

在MySQL的崩溃恢复过程中,确实存在一个共同的数据字段称为XID(Transaction ID,事务ID),它在Redo Log和Binlog中起到连接的作用。

当MySQL进行崩溃恢复时,会按顺序扫描Redo Log中的日志记录,并执行以下操作:

  1. 遇到有prepare和commit的Redo Log:
  • 如果扫描到一个已经提交(commit)的事务的Redo Log记录,MySQL会直接提交该事务,将其应用到内存中的数据页,以确保数据的一致性。
  1. 遇到只有prepare而没有commit的Redo Log:
  • 如果扫描到只有prepare而没有commit的事务的Redo Log记录,MySQL会获取该记录中的XID,并使用这个XID去Binlog中查找对应的事务。
  1. 在Binlog中查找对应的事务:
  • MySQL会在Binlog中查找具有相同XID的事务记录。一旦找到对应的事务记录,MySQL会将该事务记录应用到内存中的数据页,以完成对事务的恢复。

通过这种方式,MySQL可以通过扫描Redo Log并结合Binlog中的事务记录,实现对未提交和已提交事务的恢复。这样可以确保在崩溃恢复后,数据库的数据状态与崩溃前保持一致。

需要注意的是,这个过程中的XID是用来在Redo Log和Binlog之间进行匹配的一种标识,用于关联Redo Log中的prepare阶段和commit阶段的事务操作,并在Binlog中找到相应的事务记录进行恢复。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月10日 0

暂无评论

推荐阅读
0SnbOly3LC5t