下面是目前的MySQL两阶段提交规则:

事务的两阶段提交

​ MySQL为了兼容其他非事务引擎的复制,在server服务层引入了binlog,Binlog负责记录所有引擎中的修改操作,也因为如此,binlog相比redo log更全面,更适合作为复制的媒介使用。

​ MySQL通过两阶段提交解决了服务层binlog与引擎层Innodb的redo log的一致性与协同问题。

第一阶段:InnoDB prepare,持有prepare_commit_mutex,并写入到redo log中。将回滚段(undo)设置为Prepared状态,binlog不做任何操作。

第二阶段:将事务写入Binlog中,将redo log中的对应事务打上commit标记,并释放prepare_commit_mutex。

​ MySQL以binlog的写入与否作为事务是否成功的标记,innodb引擎的redo commit标记并不是这个事务成功与否的标记。

崩溃时:

​ 扫描最后一个Binlog文件,提取其中所有的xid。

​ InnoDB维持了状态为Prepare的事务链表,将这些事务的xid与刚刚提取的xid做比较,若存在,则提交prepare的事务,若不存在,回滚。

但是,如果先写binlog再写redolog的话,当崩溃时,如果没有写redolog,那么binlog也删除掉不也能保证binlog和redolog的一致吗?

mysql一个事务多个log_MySQL的两阶段事务提交是否先写binlog再写redolog也可行?相关推荐

  1. matlab程序:储能电池参与调峰调频优化 基于多能量集成的优点,本文建立了一个基于交互控制的双级两阶段框架,以实现互联多能量系统(MESs)之间的最佳能量供应

    matlab程序:储能电池参与调峰调频优化 摘要:基于多能量集成的优点,本文建立了一个基于交互控制的双级两阶段框架,以实现互联多能量系统(MESs)之间的最佳能量供应. 在较低的水平上,每个MES通过 ...

  2. MySQL 为什么需要两阶段提交?

    文章目录 1. 什么是两阶段提交 1.1 binlog 与 redolog binlog redo log 1.2 两阶段提交 2. 为什么需要两阶段提交 3. 小结 为什么要两阶段提交?一阶段提交不 ...

  3. mysql三阶段提交实现_基于两阶段提交的分布式事务实现(UP-2PC)

    引言:分布式事务是分布式数据库的基础性功能,在2017年上海MySQL嘉年华(IMG)和中国数据库大会(DTCC2018)中作者都对银联UPSQL Proxy的分布式事务做了简要介绍,受限于交流形式难 ...

  4. 分布式事务:TCC两阶段异步补偿型

    点击上方"田守枝的技术博客",关注我 提示:可能有人在公众号上看过这篇文章,这是我2018年2月份在我的博客上写的文章,现在搬到公众号上来,搬上来之前已经被其他公众号抄袭了,懒的投 ...

  5. 分布式事务实战---XA两阶段提交(2PC)方案详解

    XA,2PC,two-phase commit protocol,两阶段事务提交采⽤的是 X/OPEN 组织定义的DTP 模型所抽象的: AP 应用程序,Application Program,定义事 ...

  6. mysql之两阶段提交

    什么是两阶段提交 当有数据修改时,会先将修改redo log cache和binlog cache然后在刷入到磁盘形成redo log file,当redo log file全都刷入到磁盘时(prep ...

  7. 事务失败返回_什么是分布式事务以及有哪些解决方案?

    1.什么是分布式事务? 答:指一次大的操作由不同的小操作组成的,这些小的操作分布在不同的服务器上,分布式事务需要保证这些小操作要么全部成功,要么全部失败.从本质上来说,分布式事务就是为了保证不同数据库 ...

  8. 什么是分布式事务Seata?Seata的几种事务模式详解

    最后更新于:2020-04-08 17:37 目录 概念 发展历程 核心组件 三种事务模式 AT模式 前提 一个分布式事务在Seata中的执行流程 Seata 的事务提交方式与 XA 协议的两段式提交 ...

  9. 面试官问我为啥B+树一般都不超过3层?3层B+树能存多少数据?redo log与binlog的两阶段提交?

    我今天逛了一下CSDN,又发现了一条显眼的数据,大概是说3层B+树足以容纳2000w条数据.我当时就蒙了,3层对2000w,心想这B+树也太厉害了吧,由此勾起了我求知的欲望,我一定要搞明白他这2000 ...

最新文章

  1. php 485串口通信,485串口通信中的常见问题
  2. 使用getopts处理输入参数
  3. centos下添加的端口不能访问(防火墙关闭)
  4. c语言解逻辑问题的一般步骤,C语言面试题---逻辑短路问题
  5. HTML学习笔记之三(localstorage的使用)
  6. PHP将json或对象转成数组
  7. Fiddler抓包2-只抓APP的请求
  8. 笔试编程常用函数(Java)
  9. 服务器虚拟网络设置,虚拟化服务器网络设置
  10. LeetCode 572. 另一个树的子树 思考分析
  11. ElasticSearch学习(三):配置与集群
  12. 【语音采集】基于matlab GUI语音信号采集【含Matlab源码 291期】
  13. Flash Player10一个非常牛的功能SaveBitmap
  14. 车辆信息查询api,通过车系名称查询相关信息
  15. PMOS类型 LDO基本原理
  16. 桐桐的数学难题(质因数分解)
  17. 互联网金融学习总结(4)——大数据风控的九种维度
  18. workflow工作流类型及其区别
  19. JavaWeb进阶之路:MyBatis初体验
  20. Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效

热门文章

  1. 【Elasticsearch】es fielddata 字段数据
  2. 60-140-040-使用-DataSink-Data Sink 介绍
  3. 95-140-120-源码-transform-算子iterate
  4. 10-windows下的Orcale报错ORA-01031: 权限不足
  5. Java switch的使用细节和使用注意
  6. android系统广播 定向广播,Android之定向广播
  7. HTML5特性system,HTML5教程 FileSystemAPI整理
  8. amoeba实现mysql主从读写分离_利用Amoeba实现MySQL主从复制和读写分离
  9. 【ECharts 置图表同序列不同数据点的独立颜色值】
  10. 最短路径算法——迪杰斯特拉(Dijkstra)