Mysql事务的两段式提交

binlogredo log区别

为了满足Mysql的事物ACID特性,InnoDB引入了redo logundo log日志文件。为了满足主从同步Mysql引入了binlog日志文件。redo logbinlog文件都保存的数据库对数据库的修改,但是binlogredo log本质上是不一样的:

  • redo log是存储引擎层产生,仅支持Innodb;binlog是mysql数据上层产生,支持所有存储引擎。
  • redo log是记录物理日志,记录的是页的物理修改;binlog记录的是逻辑日志,记录的是SQL语句。
  • redo log是在事务进过程中产生,日志内容并不是随着事务提交顺序写入;binlog是在事务提交完成后释放锁之前进行一次性的写入。
  • redo log主要所用是保证事务持久性;binlog主要用来所恢复和复制。

为什么需要二阶段提交(2PC)

redo logbinlog数据不一致时就可能导致主从数据不一致,比如:

  • 只保存了redo log日志,当主节点宕机重启后,主节点可以通过redo log日志恢复事物,保存数据最新,但是binlog丢失无法完成主从同步,这样就导致从节点没有最新数据。
  • 只保存了binlog,当主节点宕机重启后,本机最新事物无法重新执行,数据丢失,但是从库可能通过binlog已经收到了修改通知,从库将会存在最新数据,而主库没有。

为了避免这种情况,MySQL 引入了两阶段提交的机制。

两阶段提交就是将一个事务分成两个阶段来提交:prepare 阶段和 commit 阶段。在 prepare 阶段,事务会先写 redo log 并将其标记为 prepare 状态,然后写 binlog;在 commit 阶段,事务会将 redo log 标记为 commit 状态,并将 binlog 落盘。这样,无论数据库在哪个时刻发生宕机,都可以根据 redo log 和 binlog 的状态来判断事务是否提交,并保证数据的一致性。

两阶段提交的流程

MySQL采用了如下的二阶段提交流程:

  • 在准备阶段,MySQL先将数据修改写入redo log,并将其标记为prepare状态,表示事务还未提交。然后将对应的SQL语句写入bin log。
  • 在提交阶段,MySQL将redo log标记为commit状态,表示事务已经提交。然后根据sync_binlog参数的设置,决定是否将bin log刷入磁盘。

通过2PC机制,MySQL可以保证在任何时刻,redo log和bin log都是逻辑上一致的。如果MySQL发生崩溃,可以根据redo log恢复数据页的状态,也可以根据bin log恢复SQL语句的执行。

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

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

相关文章

UE5中实现后处理深度描边

后处理深度描边可以通过取得边缘深度变化大的区域进行描边,一方面可以用来做角色的等距内描边,避免了菲尼尔边缘光不整齐的问题,另一方面可以结合场景扫描等特效使用,达到更丰富的效果: 后来解决了开启TAA十字线和锯齿…

XXL-Job的基本使用

一、市面上常见的任务调度产品 针对分布式任务调度的需求,市场上出现了很多的产品: 其中XXL-job 是我们经常使用的任务调度平台,XXL这三个英文字母.是以作者名许雪里命名的。 可以前往 Gitee 地址进行下载使用 https://gitee.com/xuxueli0323/xxl-job.git二、XXL-J…

使用`paddle.nn.Layer`自定义网络教程

文章目录 使用paddle.nn.Layer自定义网络教程1. 概念介绍2. 数据处理3. 搭建一个完整的深度学习网络4. 使用paddle.nn.Layer构建深度学习网络5. 利用paddle.nn.Layer进行子层的访问6. 修改paddle.nn.Layer层的成员变量7. 存储模型的参数8. 总结 使用paddle.nn.Layer自定义网络教…

LockBit病毒入侵揭秘:如何防范与应对

在数字时代,随着科技的飞速发展,网络安全问题愈发凸显。恶意软件和勒索软件等网络威胁正不断演变,其中一款备受关注的勒索软件就是LockBit。本文将深入介绍LockBit的特征、攻击手段、演进历程以及对网络安全的威胁。 01 主要特征 LockBit是…

算法知识(java)随笔

1: 保留指定的小数为 printf("%.2f\n", ret) 和c语言类似 // 怎么保留小数 System.out.printf("%.2f\n", 1.0/3); 2: 在写小数二分的时候 加入让结果保留6位数 那么 while(r - l > 1e-8) 3: java Map里面之前写的代码: /*** 也就是 统计x在map里面的…

第二十一周周报

文献阅读:Recent Advances of Monocular 2D and 3D Human Pose Estimation: A Deep Learning Perspective 摘要:在本文中,作者提供了一个全面的 2d到3d视角来解决单目人体姿态估计的问题。首先,全面总结了人体的二维和三维表征。…

腾讯云Windows轻量应用服务器的默认密码是什么,以及如何重置?

首先,腾讯云轻量应用服务器的默认用户名是没有设置密码的,首次登录时需要重置密码。这意味着如果你的轻量应用服务器是腾讯云的,那么默认密码是不存在的,需要通过重置密码来获得一个新的密码。 关于如何重置密码,有几…

chatgpt新版本api的调用

chatgpt新版本api的调用 原始版本调用api方式:新版调用chatgpt-api的方式: 原始版本调用api方式: import openaiopenai.api_key "{上面复制的key}"completion openai.ChatCompletion.create(model"gpt-3.5-turbo",mes…

Spring El表达式官方文档学习

文章目录 推荐一、概述1、什么是SpEL2、SpEL能做什么 二、SpEL表达式使用1、文字表达式2、属性, 数组, List, Map,和 索引(1)属性操作(2)数组和List(3)Map 3、内嵌List4、内嵌Map5、构建数组6、调用类的方法…

Windows的Linux化持续推进中

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Java基础 - 6 - 面向对象(二)

Java基础 - 6 - 面向对象(一)-CSDN博客 二. 面向对象高级 2.1 static static叫做静态,可以修饰成员变量、成员方法 2.1.1 static修饰成员变量 成员变量按照有无static修饰,分为两种:类变量、实例变量(对象…

JavaScript 语句语法的教程

JavaScript 是一种广泛应用于网页开发的脚本语言,熟练掌握 JavaScript 的语法是成为一名优秀的前端开发工程师的必备技能之一。本教程将详细介绍 JavaScript 中的语句语法,帮助初学者快速入门并加深对 JavaScript 语法的理解。 一、注释 在 JavaScript…

常见的爬虫逆向面试题

文章转载于:https://mp.weixin.qq.com/s/dXRo0D_Xx7E_h85XbnwPVQ 有兴趣去源站浏览学习 主要自己看着方便些 1.HTTS三次握手 目前使用的 HTTP/HTTPS 协议是基于 TCP 协议之上的,因此也需要三次握手。在 TCP 三次握手建立链接之后,才会进行 …

故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab) 模型描述 XGBoost通过集成多个决策树来建立一个强大的预测模型。它采用了一种特殊的梯度提升技术,称为极限梯度提升(Extreme Gradient Boosting),以提高模型的性能和鲁棒性。 极限梯度…

【大数据Hive】hive 多字段分隔符使用详解

目录 一、前言 二、hive默认分隔符规则以及限制 2.1 正常示例:单字节分隔符数据加载示例 2.2 特殊格式的文本数据,分隔符为特殊字符 2.2.1 文本数据的字段中包含了分隔符 三、突破默认限制规则约束 3.1 数据加载不匹配情况 1 3.2 数据加载不匹配…

python paramiko 网络系统运维

概述 背景:网络系统运维与建设:工作中发现客户使用python脚本批量操作网络设备导出多台网络设备的配置定期执行相关的巡检工作 修改配置 # -*- coding:utf8 -*- """ # editor: hjjdreamer # create-time: 2024/3/3-23:31 # Python-Scri…

Java项目推荐|几个B站上的从零搭建项目

分享几个B站上搜集到的技术比较全,讲解也详细的Java后端开发项目 目录 谷粒商城 2020-03-31 iHRM 人力资源管理系统 2021-04-16 瑞吉外卖 2022-04-12 学成在线 2023-01-13 尚上优选 2023-06-06 黑马头条 2023-06-13 苍穹外卖 2023-07-05 谷粒商城 2020-03-3…

命名实体识别NER

一、什么是命名实体识别: 命名实体:通常我们将人名、地名、机构名等专有名词统称命名实体,如:周杰伦,黑山县,孔子学院,24方钢直机 顾名思议,命名实体识别(简称NER&#x…

【常用的 Git 命令及简要示例说明】

常用的 Git 命令及简要示例说明,以供参考: 初始化一个新的代码仓库: git init克隆一个远程仓库到本地: git clone https://github.com/user/repo.git添加当前所有变更到暂存区: git add .提交暂存区的变更到本地仓库&a…

STM32FreeRTOS任务通知(STM32cube高效开发)

文章目录 一、任务通知(一)任务通知概述1、任务通知可模拟队列和信号量2、任务通知优势和局限性 (二) 任务通知函数1、xTaskNotify()发送通知值不返回先前通知值的函数2、xTaskNotifyFromISR()发送通知函数ISR版本3、x…