Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL事务提交流程

MySQL事务提交流程

作者头像
用户7353950
发布于 2022-06-23 08:30:51
发布于 2022-06-23 08:30:51
1.1K0
举报
文章被收录于专栏:IT技术订阅IT技术订阅

有binlog的CR方式(重点核心!!): 有binlog情况下,commit动作开始时,会有一个Redo XID 的动作记录写到redo,然后写data到binlog,binlog写成功后,会将binlog的filename,日志写的位置position再写到redo(position也会写到pos文件里),此时才表示该事务完成(committed)。如果只有XID,没有后面的filename和position,则表示事务为prepare状态。 流程: commit; --> write XID to redo. --> write data to Binlog. --> write filename,postsion of binlog to redo. --> commited.

记录Binlog是在InnoDB引擎Prepare(即Redo Log写入磁盘)之后,这点至关重要。

如果事务在不同阶段崩溃,recovery时会发——

crash发生阶段

事务状态

事务结果

当事务在prepare阶段crash

该事务未写入Binary log,引擎层也未写redo到磁盘。

该事务rollback。

当事务在binlog写阶段crash

此时引擎层redo已经写盘,但Binlog日志还没有成功写入到磁盘中。

该事务rollback。

当事务在binlog日志写磁盘后crash,但是引擎层没有来得及commit

此时引擎层redo已经写盘,server层binlog已经写盘,但redo中事务状态未正确结束。

读出binlog中的xid,并通知引擎层提交这些XID的事务。引擎提交这些后,会回滚其他的事务,使引擎层redo和binlog日志在事务上始终保持一致。事务通过recovery自动完成提交。

总结起来说就是如果一个事务在prepare阶段中落盘成功,并在MySQL Server层中的binlog也写入成功,那这个事务必定commit成功。

(redolog 写成功 && binlog 写成功 == commit,缺一不可。)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术订阅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL是如何保证不丢数据的(一)
数据的一致性和完整性对于在线业务的重要性不言而喻,如何保证数据不丢呢?今天我们就探讨下关于数据的完整性和强一致性,MySQL做了哪些改进。
MySQL数据库技术栈
2020/08/05
2.7K0
MySQL复制(三) - binlog组提交
​通过sync_binlog=1控制事件持久化到磁盘,每次事务提交时进行fsync操作,将消耗大量的磁盘IOPS,如何最大化的提高性能,降低fsync对事务高并发的影响呢?
懒熊
2021/01/14
1.1K0
MySQL复制(三) - binlog组提交
【阿里年薪百万数据库面试】MySQL会丢数据吗?
WAL机制保证只要redo log和binlog保证持久化到磁盘,就能确保MySQL异常重启后,数据可以恢复。
JavaEdge
2021/12/07
2.8K0
【阿里年薪百万数据库面试】MySQL会丢数据吗?
MySQL的事务实现原理介绍:undo log、redo log、checkpoint和LSN
参考博客1(建议先通读该博客)介绍了MySQL通过Undo+Redo Log的机制实现了事务的原子性、一致性和持久性(关于事务的隔离性是通过锁机制来保障的,请参考我的另一篇博文MySQL常见的七种锁详细介绍)。文章中提到:
saintyyu
2021/11/22
1K0
MySQL 的 crash-safe 原理解析
MySQL作为当下最流行的开源关系型数据库,有一个很关键和基本的能力,就是必须能够保证数据不会丢。那么在这个能力背后,MySQL是如何设计才能保证不管在什么时间崩溃,恢复后都能保证数据不会丢呢?有哪些关键技术支撑了这个能力?本文将为我们一一揭晓。
2020labs小助手
2020/05/25
1.3K0
MySQL系列一:掌握MySQL底层原理从学习事务开始
面试时候,经常会被问到什么是事务、事务的特征、事务的隔离级别这些八股文问题,凭死记硬背通常也可回答的七七八八。但是面试官一旦换个角度问这些问题,有时候可能就语塞了。
IT大咖说
2021/07/19
9260
【图文详解】MySQL系列之redo log、undo log和binlog详解
这篇文章主要介绍了MySQL系列之redo log、undo log和binlog详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。
一个会写诗的程序员
2021/03/15
17.9K1
Mysql底层原理超详细,一文速通
里面的三个核心组件, 解析器, 优化器, 执行器,负责完成服务层的核心功能, 其中三个核心组件的交互流程大致如下, 解析器将sql语句转换为解析树, 优化器选择最优的执行方案, 执行器根据计划调用存储引擎执行对应操作并返回结果, 有点类似于公司老总负责将公司战略拆分为一个个小目标分发给公司高管, 然后公司高管决策, 已最高效率达到目的,之后再将任务拆分,给我们打工人, 之后打工人来负责执行
天下之猴
2024/10/01
5251
Mysql底层原理超详细,一文速通
谈谈二阶段提交在MySQL中的广义应用
2PC全称是Two-PhaseCommit,翻译过来是二阶段提交,是分布式事务XA规范(XA规范是X/Open DTP定义的交易中间件与数据库之间的接口规范)的实现思路,满足CAP理论的CP,是强一致性事务。
林淮川
2021/12/20
1.4K0
谈谈二阶段提交在MySQL中的广义应用
MySQL的各种日志
孔乙己又来酒馆喝酒,兜里没钱手机也没电了,只能向掌柜的赊账。掌柜有一块粉板,当客人要赊账的时候就往上写一笔,等客人少的时候或者粉板写满了就记到账本里去。还好有这块粉板,不然每次客人要赊账,掌柜都要翻看账本,在密密麻麻的账本里找到赊账客人的名字绝对不是一件容易的事,有了粉板,掌柜只要往粉板上记一笔:“孔乙己 赊 两文”,空闲的时候再更新到账本里去,简单多了。
超超不会飞
2020/09/18
1.3K0
MySQL的各种日志
听我讲完redo log、binlog原理,面试官老脸一红
  我有一个老朋友,我们叫他熊猫。发际线及将触碰到后脑勺,大框金丝眼镜也掩盖不住那黝黑的眼圈,显得格外的“程序员”;穿着也非常不拘一格,上半身是衬衣西服,下半身是牛仔裤配拖鞋~
陈哈哈
2021/10/13
1.2K0
超干货!为了让你彻底弄懂MySQL事务日志,我通宵肝出了这份图解!
还记得刚上研究生的时候,导师常挂在嘴边的一句话,“科研的基础不过就是数据而已。”如今看来,无论是人文社科,还是自然科学,或许都可在一定程度上看作是数据的科学。
Bug开发工程师
2020/06/10
5070
超干货!为了让你彻底弄懂MySQL事务日志,我通宵肝出了这份图解!
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL作为最流行的开源数据库,其重要性不言而喻。日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。常见的日志有以下几种:
寻求出路的程序媛
2025/02/06
7610
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
图解MySQL是如何运行的
一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。
数据和云
2022/02/25
4K3
图解MySQL是如何运行的
Mysql各种日志binlog、redolog、undolog——Mysql系列(二)
https://segmentfault.com/a/1190000041758784
翰墨飘香
2023/06/11
4.3K0
01 | 日志系统:一条SQL更新语句是如何执行的?
我们还是从一个表的一条更新语句说起,下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c: mysql> create table T(ID int primary key, c int); 如果要将 ID=2 这一行的值加 1,SQL 语句就会这么写: mysql> update T set c=c+1 where ID=2;
名字是乱打的
2021/12/24
4740
01 | 日志系统:一条SQL更新语句是如何执行的?
mysql索引和日志相关问题
他们有一个共同的字段, 叫做xid, 崩溃恢复的时候, 会按照顺序扫描redolog:
历久尝新
2020/06/05
7840
MySQL 中的 DML 语句执行流程,你理解的跟我一样吗?
在DML语句执行的过程中,主要会涉及到两个日志——redo log和bin log,而这两个日志是数据库 WAL (Write Ahead Logging,先写日志再写磁盘提高效率) 技术的两大主角。下面我来介绍一下这两个日志。
Java程序猿阿谷
2020/07/29
1.3K0
MySQL 中的 DML 语句执行流程,你理解的跟我一样吗?
MySQL基础篇2 mysql的日志系统
我们还是从一个表的一条更新语句说起,下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c:
历久尝新
2020/05/18
4600
MySQL基础篇2 mysql的日志系统
update执行流程(MySQL redo log和binlog详解)
update语句也需要经过连接器、分析器、优化器、执行器,但是update语句相比select语句还是有很大不同的,更新流程设计两个重要的日志模块:
shysh95
2022/01/05
2K0
update执行流程(MySQL redo log和binlog详解)
推荐阅读
相关推荐
MySQL是如何保证不丢数据的(一)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档