mysql的两阶段提交理解

article/2025/9/14 12:37:32

一个事务的执行方式(一般存在显式开启和隐式开启,在未申明的情况下一般是隐式事务):redo log存在两阶段提交,prepare和commit.当写完redo log 时,开始写 bin log ,当bin log写完,会在这次事务的最后加上commit(xid),标志这次事务是完整的,此时再在redo log的最后加上commit 标志此次事务完整,再将内存中的数据刷到磁盘。
在这里插入图片描述

基于上面的逻辑,判断事务回滚。
当mysql异常重启,判断顺序,首先是判断redo log是否commit,再去判断bin log。redo log已经有commit标记,那么事务一定提交。
(1) A时刻,当redo log处于prepare阶段,如果此时bin log未写完整,也就是还未进行commit,此时事务会进行回退,不会存储到数据库。
(2) A时刻,当redo log处于prepare阶段,如果此时bin log已经commit,则会提及事务,将数据存储到数据库
(3) B时刻,基于上面的理论,当处于B时刻,事务一定会被提交。

为什么mysql要设计成redo log 处于parper阶段时,bin log commit 就需要提交事务。
因为当数据库重启时,从库会基于bin log进行数据同步和恢复,如果主库binlog已经commit标记,而事务未提交,而从库根据Binlog同步后提交了,那么数据就存在不一致,说到底也就是保证数据的一致性。


http://chatgpt.dhexx.cn/article/niKXCqtW.shtml

相关文章

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

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

两阶段提交(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…

Lorenz系统最大lyapunov exponent的求解

首先看下Lorenz混沌系统: 赋予初始值,例如: 当然,初始值可以根据需要设定。 看下他的吸引子,很美: 看下他的分叉图:

matlab 基于Lorenz系统 Lyapunov指数的管道超声导波检测

1、内容简介 略 可以交流、咨询、答疑 2、内容说明 为了提高长距离管道超声导波检测中弱导波信号的识别精度,提出了基于 Lorenz 系统 Lyapunov 指数的 管道超声导波检测方法。基于非共振周期信号的参数激励实现 Lorenz 系统的混沌控制,将待测的导波信…