什么是Mysql 两阶段提交?为什么必须有“两阶段提交”呢? 两阶段提交的原理? 解决 bin log 与 redo log 的一致性问题?

article/2025/9/15 7:47:57

文章目录

  • 什么是两阶段提交
    • 为什么必须有“两阶段提交”呢? 两阶段提交的原理? 解决 bin log 与 redo log 的一致性问题?
      • 在没有两阶段提交的恢复情况下:
      • 有了两阶段两阶段提交后的恢复情况:


什么是两阶段提交

当有数据修改时,会先将修改redo log cache和binlog cache然后在刷入到磁盘形成redo log file,当redo log file全都刷入到磁盘时(prepare 状态)和提交成功后才能将binlog cache刷入磁盘,当binlog全部刷新到磁盘后会记录一个xid,然后在relo log file上打上commit标志(commit阶段)
在这里插入图片描述













为什么必须有“两阶段提交”呢?
两阶段提交的原理?
解决 bin log 与 redo log 的一致性问题?

更新语句执行过程:在这里插入图片描述


在没有两阶段提交的恢复情况下:

1、如果先redo log,后binlog,在 redo log 写完,binlog 还没时崩溃,恢复后主库数据被修改了,但 binlog 并没有该语句。因此从库会丢失该更新导致主从不一致

2、如果先binlog,后redo log,在binlog写完,redo log还没时崩溃,恢复后从库比主库多了一条更新,导致主从不一致



有了两阶段两阶段提交后的恢复情况:

1、redo 写入时崩溃,这时binlog也还没写入,恢复数据不受影响

2、redo写好了,binlog写入时崩溃,这时redo是prepare状态,还没有提交,恢复时事务会回滚,binlog也还没有记录,所以不会影响

3、redo写好了,binlog写好了,但是还没有commit时崩溃了,这时会判断对应事务的binlog是否存在并完整:
(1)如果存在并完整则提交事务,这时恢复到事务提交之后的状态,因为binlog中有记录,所以恢复成功
(2)如果binlog不存在或者不完整,会恢复到事务提交之前的状态,因为binlog中无记录或者不完整的记录不会生效,所以恢复也成功

4、redo已经有了commit标识,则直接提交事务,同时因为binlog有记录,则恢复数据也不受影响


http://chatgpt.dhexx.cn/article/5FXIQ87e.shtml

相关文章

分布式事务 - 两阶段提交与三阶段提交

在分布式系统中,著有CAP理论,该理论由加州大学伯克利分校的Eric Brewer教授提出,该理论阐述了在一个分布式系统中不可能同时满足一致性(Consistency)、可用性(Availability),以及分区…

mysql的两阶段提交理解

一个事务的执行方式(一般存在显式开启和隐式开启,在未申明的情况下一般是隐式事务):redo log存在两阶段提交,prepare和commit.当写完redo log 时,开始写 bin log ,当bin log写完,会在这次事务的最后加上commit(xid)&am…

分布式事务(两阶段提交、三阶段提交)

假如没有分布式事务 在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子: 上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻…

两阶段提交(2 Phase Commit) 在 PostgreSQL 和 RocksDB 中的实现

文章目录 前言用法PostgreSQLRocksDB 实现PostgreSQL 2PCRocksDB 2PCWRITE_COMMITTEDWRITE_PREPARED解决 snapshot-read 问题解决 rollback 问题 WRITE_UNPREPARED 总结 前言 本节中提到的代码实现是基于 PG:REL_15_STABLE 和 Rocksdb: master-fcd816d534 代码介绍的…

分布式事务(2)两阶段提交

分布式事务(1)基本概念 分布式事务(2)两阶段提交 分布式事务(3)TCC 分布式事务(4)可靠消息最终一致性 分布式事务(5)最大努力通知 分布式事务【2】2PC两阶段提交 1.什么是2PC(两阶段提交)2.解决方案2.1 XA方案2.2 Seata方案 3.seata实现2PC事务4.2PC解决…

MYSQL之两阶段提交和组提交(数据一致性)

我们在MySQL 的日志中详细的介绍了undo log、redo log、binlog这三个日志和所用到的一些缓存知识,那么下面我们分析一下更新语句执行过程,它们是怎么变化的呢?下面我们直接给答案吧。假如我们修改一行主键索引(id)为1的…

MySQL的两阶段提交(数据一致性)

MySQL的两阶段提交 两阶段提交过程为什么要写redo log,不写redo log的话,根本就不会出现“两阶段提交”的麻烦事啊?为什么要写两次redo log,写一次不行吗?在两阶段提交的情况下,是怎么实现崩溃恢复的呢&…

分布式事务之两阶段提交

两阶段提交协议 两阶段提交协议把分布式事务分为两个阶段,一个是准备阶段,另一个是提交阶段;准备阶段和提交阶段都是由事务管理器发起的;我们可以将事务管理器称为协调者,将资源管理器称为参与者。 流程 准备阶段&a…

两阶段提交和三阶段提交的理解

两阶段提交和三阶段提交的理解 本文主要通过梳理流程说明2PC的缺点,并总结3PC的优点。 一、2PC流程及致命问题 如图所示,2PC的流程简要: 1.协调者 参与者都是INIT状态,参与者等待消息。 2.协调者进入prepare状态发送vote_requ…

两阶段提交和三阶段提交的区别

1.分布式理论:一致性协议:2PC 1.1 什么是2PC2PC,即两阶段提交协议的简写,是整个事务过程分为两个阶段,准备阶段(Prepare phase)和提交阶段(Commit phase)两个阶段过程: …

分布式两阶段提交和三阶段提交

随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。 为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。本…

MySQL (十四) 两阶段提交

一. 两阶段提交 1.1 利用 binlog 和redolog 做到两阶段提交 从上图中看出:最后提交事务的三个步骤: 写入redo log ,处于prepare状态写binlog修改redo log 状态变为commit 由于redo log 的提交分为prepare 和commit两个阶段,所以我…

mysql之两阶段提交

什么是两阶段提交 当有数据修改时,会先将修改redo log cache和binlog cache然后在刷入到磁盘形成redo log file,当redo log file全都刷入到磁盘时(prepare 状态)和提交成功后才能将binlog cache刷入磁盘,当binlog全部刷…

分布式事务:两阶段提交与三阶段提交

两阶段提交与三阶段提交 分布式事务二阶段提交请求阶段提交阶段举例故障分析柜员侧出现故障或拒绝Proposal第一阶段经理侧出现故障第二阶段经理侧出现故障 二阶段提交存在的问题 三阶段提交canCommit阶段preCommit阶段doCommit阶段特点 参考 分布式事务 满足ACID(原…

正确理解二阶段提交(Two-Phase Commit)

文章目录 明确问题草稿方案原子提交协议希望实现的2个特性正确的二段提交协议(Two-Phase Commit)二阶段提交协议如何满足安全性(Safety)二阶段提交协议如何满足存活性( Liveness) 如何应对超时 超时终止协议 如何应对宕机重启 二阶…

两阶段提交协议(two phase commit protocol,2PC)详解

一、协议概述 两阶段提交协议(two phase commit protocol,2PC)可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消(回…

简单谈谈MySQL的两阶段提交

一、简单回顾三种日志 在讲解两阶段提交之前,需要对MySQL中的三种日志即binlog、redo log与undo log有一定的了解。 在这三种日志中,很多同学会把binlog与redo log混淆,下面使用一张表格来简单对比下两者的区别。 当然,如果对bi…

现控笔记(五)稳定性与Lyapunov方法

稳定性与李雅普诺夫方法 线性系统稳定性:只取决于系统的结构和参数,稳定的条件是特征方程的根都具有负实部(在左半根平面),可用劳斯判据、耐奎斯特判据等方法判断、非线性系统的稳定性:与初始条件和外部扰动的大小有关。 稳定性…

Lyapunov稳定性分析复习笔记

前言 本文所提及的稳定性分析是指系统运动状态的稳定性分析,在进行本文标题内容相关的学习之前,我们首先需要回答一个问题,为什么需要进行稳定性分析?其实这个问题是不言而喻的,稳定性问题在当代显得尤为重要&#xf…

Lyapunov-Krasovskii泛函二重积分项求导_原理

Lyapunov-Krasovskii泛函二重积分项求导_原理 回答[引理1][定理1] 2022年下半年,看了很多关于时滞系统和引入时滞的网络化控制系统的论文,对稳定性证明中Lyapunov-Krasovskii泛函中二重积分项求导结果有些疑问,故在知乎上提问寻求帮助&#x…