当前位置: 首页 > news >正文

redo log 和 bin log 的两阶段提交

两阶段提交的过程

当事务提交后,有一个两阶段提交策略。

在开启两阶段提交时,会开启一个 XA 事务(宏观上的事务),

Prepare 阶段:将 redo log 的状态设置为 prepare,然后将 事务XID 写入 redo log,然后提交 redo log

Commit 阶段:将事务 XID 写入bin log,然后对 bin log 刷盘,最后将 redo log 的状态设置为 commit

当断电后,进行崩溃恢复时,会按照顺序扫描 redo log 文件

  1. 会首先查看 redo log 的状态,如果 redo log 的状态为 commit,则说明事务的两阶段提交已经完成,可以放心进行数据恢复。

  2. 如果 redo log 状态为 prepare,则检查 redo log 中的 XID

  3. 再根据 XID 去 bin log 中进行查找,如果 bin log 中不存在 XID,则说明 虽然 redo log 刷盘了,但是 bin log 没有刷盘,此时会进行事务回滚(根据 undo log 回滚)

  4. 如果 bin log 存在 XID,则虽然 redo log 处于 prepare 状态,但 bin log 已经刷盘了,此时会对事务进行提交。同时也可以放心进行数据恢复。

为什么有两阶段提交

主要是为了保证主从数据库一致性。

若没有两阶段提交,可能发生 redo log 已经刷入磁盘但 bin log 没有刷入磁盘,或者 bin log 已经刷入磁盘而 redo log 没有刷入磁盘的情况。如果是前者,若断电,则崩溃恢复后主数据库的数据可以恢复,而从数据库从 bin log 中获取到的数据是有缺失的,从而导致主从不一致。如果是后者,若断电,则恢复后,主数据库的数据会丢失,而从数据库的数据可以恢复完整,也会导致主从不一致现象。

http://www.lryc.cn/news/450490.html

相关文章:

  • Go基础学习07-map注意事项;多协程对map的资源竞争;sync.Mutex避免竟态条件
  • 远程服务器安装anaconda并创建虚拟环境
  • 什么是IIC通信协议?
  • P3131 [USACO16JAN] Subsequences Summing to Sevens S Python题解
  • 鸿蒙NEXT开发-ArkUI(基于最新api12稳定版)
  • Matplotlib 使用 LaTeX 渲染图表中的文本、标题和数学公式
  • Android 安卓内存安全漏洞数量大幅下降的原因
  • c++primier第十二章类和动态内存
  • Ansible学习之ansible-pull命令
  • Linux:磁盘管理
  • FP7209: 用于紫外线消毒灯的 升压LED恒流驱动芯片
  • 【华为HCIP实战课程二】OSPF基础介绍和OSPF RID NBMA配置详解
  • 网络编程(13)——单例模式
  • 基于定制开发与2+1链动模式的商城小程序搭建策略
  • 银河麒麟,apt 安装软件报错640Unknown Status
  • python UNIT 3 选择与循环(2)
  • 828华为云征文|部署在线文档应用程序 CodeX Docs
  • Linux的多线程(线程的创建,退出,取消请求,取消处理例程,线程属性的设置)
  • git 本地代码关联远程仓库并推送
  • 推荐一个可以把PDF样本册转换为翻页电子书的网站
  • 【Linux 23】线程池
  • Rust SQLite 跨平台使用
  • docker运行arm64架构的镜像、不同平台镜像构建
  • vue基于Spring Boot框架的高校实验室预约管理系统
  • Linux中find命令详解
  • 无水印短视频素材下载网站有哪些?十个高清无水印视频素材网站分享
  • SpringBoot+Activiti7工作流入门实例
  • Azure OpenAI检索增强微调:使用 GPT-4o 对 GPT-4o mini 进行微调,以适应特定领域的应用
  • ISP Pipeline
  • < IDE编程环境配置>