15 | 答疑文章(一):日志和索引相关问题

本文讨论了MySQL中redo log和binlog在崩溃恢复中的作用,以及两阶段提交的重要性。MySQL通过XID在redo log和binlog间建立关联,确保数据一致性。在两阶段提交中,先写redo log后写binlog是为了防止因binlog写入失败导致的数据不一致。redo log用于快速恢复,但不能替代binlog的归档功能。同时,探讨了redo log的大小配置和数据落盘的原理。
摘要由CSDN通过智能技术生成

在这里插入图片描述
如果在图中时刻 A 的地方,也就是写入 redo log 处于 prepare 阶段之后、写 binlog 之前,发生了崩溃(crash),由于此时 binlog 还没写,redo log 也还没提交,所以崩溃恢复的时候,这个事务会回滚。这时候,binlog 还没写,所以也不会传到备库。
时刻 B 也就是 binlog 写完,redo log 还没 commit 前发生 crash,崩溃恢复时的判断规则。

  1. 如果 redo log 里面的事务是完整的,也就是已经有了 commit 标识,则直接提交;
  2. 如果 redo log 里面的事务只有完整的 prepare,则判断对应的事务 binlog 是否存在并完整:
    a.如果是,则提交事务; b. 否则,回滚事务。

MySQL 怎么知道 binlog 是完整的?

一个事务的 binlog 是有完整格式的:

  1. statement 格式的 binlog,最后
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值