MySQL两阶段提交目的

阶段提交的过程

  1. 事务执行阶段:事务开始执行,InnoDB执行SQL语句的具体操作,如数据修改、删除等,并将这些操作记录在内存中。
  2. 写入Redo Log(准备阶段):事务即将提交时,首先将事务相关的操作记录写入Redo Log中,状态为“Prepare”,表示事务已经准备好提交。Redo Log是顺序写入的,其目的在于保证在崩溃时可以通过它来恢复事务。
  3. 写入Binlog:在将事务标记为“Prepare”之后,MySQL Server层会将这个事务的操作记录到Binlog中。Binlog包含了SQL语句执行的所有记录,是顺序写入的。如果Binlog写入失败,事务会回滚;如果Binlog写入成功,则事务可以进入提交阶段。
  4. 提交Redo Log(提交阶段):当Binlog成功写入后,InnoDB会将Redo Log的状态从“Prepare”变为“Commit”。这一过程会将事务的最终结果标记为已完成。
  5. 两阶段提交完成:至此,Binlog和Redo Log都已经写入并完成提交,事务被持久化到数据库中。

两阶段提交的目的

MySQL的两阶段提交(Two-Phase Commit, 2PC)主要目的是为了确保在分布式事务处理中数据的一致性和完整性。在MySQL中,两阶段提交机制用于协调存储引擎层的Redo Log和服务器层的Binlog之间的操作顺序,以防止在系统崩溃或异常情况下出现数据不一致的情况。

  • 崩溃恢复:如果在提交事务的过程中系统崩溃,由于在“Prepare”阶段已经写入了Redo Log,系统可以通过检查Redo Log和Binlog来判断事务是该提交还是回滚,从而保证数据一致性。
  • 一致性保证:如果没有两阶段提交,Redo Log和Binlog的提交不同步,可能会出现Binlog记录了某个事务,但实际上这个事务并没有被持久化,或者相反。这会导致数据的不一致,尤其在主从复制时尤为重要

故障时应该回滚/提交?

1. 准备阶段

如果主库在准备阶段(即写入redo log之后,但在写入binlog之前)发生故障,那么在恢复时,系统会检查redo log中的事务状态。如果redo log中的事务处于prepare状态,但对应的binlog中没有该事务的记录,那么系统会回滚该事务。这是因为在这种情况下,主库和从库的数据可能不一致,回滚事务可以确保数据的一致性。

2. 提交阶段

如果主库在提交阶段(即写入binlog之后,但在将redo log标记为commit之前)发生故障,那么在恢复时,系统会检查binlog中的事务是否存在并且完整。如果binlog中的事务存在且完整,那么系统会提交该事务;如果binlog中的事务不存在或者不完整,那么系统会回滚该事务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端项目使用gitlab-cicd+docker实现自动化部署

GitLab CI/CD 是一个强大的工具,可以实现项目的自动化部署流程,从代码提交到部署只需几个步骤。本文将带你配置 GitLab CI/CD 完成一个前端项目的自动化部署。 前言 为什么使用cicddocker? 目前我们公司开发环境使用的shell脚本部署&#…

easyexcel 导出日期格式化

1.旧版本 在新的版本中formate已经被打上废弃标记。那么不推荐使用这种方式。 2.推荐方式 推荐使用另外一种方式【 Converter 】代码如下,例如需要格式化到毫秒【yyyy-MM-dd HH:mm:ss SSS】级别 创建一个公共Converter import com.alibaba.excel.converters.Conv…

DApp开发前端框架选择:React还是Vue?

在区块链DApp开发中,前端框架的选择对用户体验和开发效率至关重要。React和Vue作为两大主流前端框架,各自拥有广泛的开发者基础和丰富的生态支持。那么在DApp开发中,该如何选择适合自己的框架呢?下面我们来比较一下,看…

6. 一分钟读懂“抽象工厂模式”

6.1 模式介绍 书接上文,工厂方法模式只能搞定单一产品族,遇到需要生产多个产品族时就歇菜了。于是,在需求的“花式鞭策”下,程序员们再次绷紧脑细胞,创造出了更强大的抽象工厂模式,让工厂一次性打包多个产品…

gulp应该怎么用,前端批量自动化替换文件

背景 最近公司准备把所有项目中用到的国际化相关的key规范化,原因是: 一直以来公司的app和web端 在针对相同的需求以及相同的国际化语言,需要设置不同的两份国际化文件,难以维护旧版的国际化文件中,存在的大量值重复&#xff0c…

UML箭线图的理解和实践

在软件开发的世界里,UML(统一建模语言)作为一种标准化的建模语言,扮演着举足轻重的角色。UML类图更是软件开发设计和架构过程中的核心工具,它不仅能帮助开发者明确系统中的类及其关系,还能为后续的代码实现…

hive 行转列

行转列的常规做法是,group bysum(if())【或count(if())】 建表: CREATE TABLE table2 (year INT,month INT,amount DOUBLE );INSERT INTO table2 (year, month, amount) VALUES(1991, 2, 1.2),(1991, 3, 1.3),(1991, 4, 1.4),(1992, 1, 2.1),(1992, 2, 2.2),(1992…

【NoSQL数据库】Hbase基本操作——数据库表的增删改查

目录 一、Hbase原理 二、HBase数据库操作 三、遇到的问题和解决方法 一、Hbase原理 HBase的数据模型: 行键 时间戳 列族:contents 列族:anchor 列族:mime “com.cnn.www” T9 Achor:cnnsi.com”CNN” T8 Achor:…

【ETCD】ETCD用户密码认证

目录 概述 特殊用户和角色 root用户 root角色 用户操作 角色操作 启用身份验证 使用etcdctl进行身份验证 使用TLS通用名称 概述 etcd 2.1中增加了身份验证功能。etcd v3 API对身份验证功能的API和用户界面进行了轻微修改,以更好地适应新的数据模型。本指南…

王道考研编程题总结

我还在完善中,边复习边完善(这个只是根据我自身总结的) 一、 线性表 1. 结构体 #define MaxSize 40 typedef struct{ElemType data[MaxSize];int length; }SqList 2. 编程题 1. 删除最小值 题意 :从顺序表中删除…

Vue3技术开发,使用纯CSS3动手制作一个3D环绕的相册展示效果,支持传入任意图片.3D轮播相册的组件

主要讲述封装一个3D轮播相册的组件&#xff0c;效果图如下&#xff0c;仅仅传入一个图片的数组即可&#xff0c;效果如下&#xff1a; 使用Vue3技术开发&#xff0c;支持传入任意张数的图片。 使用方法 <template><Swiper :list"list" /> </templat…

本地运行打包好的dist

首先输入打包命令 每个人设置不一样 一般人 是npm run build如果不知道可以去package.json里去看。 打包好文件如下 命令行输入 :npm i -g http-server 进入到dist目录下输入 命令cmd 输入 http-server 成功

通过华为鲲鹏认证的软件产品如何助力信创产业

软件通过华为鲲鹏认证与信创产业有着密切的联系。鲲鹏认证是华为推动信创产业发展的一项重要举措&#xff0c;通过该认证&#xff0c;软件可以在华为的生态系统中实现更好的兼容性和性能优化&#xff0c;从而推动信创产业的全面发展和国产化替代。 鲲鹏认证的定义和重要性 鲲…

RabbitMQ介绍及安装

文章目录 一. MQ二. RabbitMQ三. RabbitMQ作用四. MQ产品对比五. 安装RabbitMQ1. 安装erlang2. 安装rabbitMQ3. 安装RabbitMQ管理界⾯4. 启动服务5. 访问界面6. 添加管理员用户7. 重新登录 一. MQ MQ( Message queue ), 从字⾯意思上看, 本质是个队列, FIFO 先⼊先出&#xff…

Vue生成类似于打卡页面

数据表格 <el-table :data"tableData" border height"calc(100vh - 240px)" :cell-style"cellFun"><el-table-column label"姓名" show-overflow-tooltip prop"name" align"center"/><el-table-co…

vscode上传本地文件到服务器

vscode上传本地文件到服务器 首先下载插件SFTP&#xff0c;我们通过ftp进行文件传输 VScode打开要传输的文件 使用快捷键 ctrlshiftP 打开搜索窗口&#xff0c;搜索SFTP 点击之后vscode文件夹下会生成对应json文件 我们编辑json信息根据远程的服务器情况填写&#xff0c;比如…

趣味数学 2.3.7 | 完全免费,无注册登录,简约纯净

趣味数学是一款完全免费的数学学习软件&#xff0c;支持安卓系统。它无需登录注册&#xff0c;界面简约纯净&#xff0c;分类详细&#xff0c;涵盖趣味数学、数学初练、应用计算、数字推理、图形推理、数字2048、题目练习和数学知识等多个分类。每个分类包含丰富的题目和关卡&a…

JavaScript 快速上手

目录 一. JavaScript 基本概念 二. JavaScript 基本语法 1. 三种引入方式 (1) 行内样式 (2) 内部样式 (3) 外部样式 2. 基础语法 (1) 变量 (2) 数据类型 (3) 运算符 3. JS 对象 (1) 数组 <1> 创建数组 <2> 数组操作 (2) 函数 <1> 普通函数 &…

php基础:文件处理2

1.文件属性 当我们在程序中操作文件时&#xff0c;可能会使用到文件的一些常见属性&#xff0c;比如文件的大小、类型、修改时间、访问时间以及权限等等。PHP 中提供了非常全面的用来获取这些属性的内置函数&#xff0c;如下表所示。 2.目录操作 新建目录&#xff1a;mkdir(路…

(二)FT2232HL调试器的驱动安装

1、FT2232HL调试器 FT2232HL调试器淘宝链接&#xff1a; http://e.tb.cn/h.TZH7byCQ1jwlqhy?tkdZo03JTjtwL ​ 2、软件下载 下载zadig-2.9.exe&#xff08;免安装&#xff09; 链接&#xff1a;https://www.filecroco.com/download-zadig/download/ ​ ​ 3、驱动安装 1…