MySQL:两阶段提交

embedded/2024/9/19 10:55:37/ 标签: mysql, 数据库

redo log(重做日志)让 InnoDB 存储引擎拥有了崩溃恢复能力。

binlog(归档日志)保证了 MySQL 集群架构的数据一致性。

虽然它们都属于持久化的保证,但是侧重点不同。

在执行更新语句过程,会记录 redo log 与 binlog 两块日志,以基本的事务为单位,redo log 在事务执行过程中可以不断写入,而 binlog 只有在提交事务时才写入,所以 redo log 与 binlog 的写入时机不一样。

回到正题,redo log 与 binlog 两份日志之间的逻辑不一致,会出现什么问题?

我们以update语句为例,假设id=2的记录,字段c值是0,把字段c值更新成1SQL语句为update T set c=1 where id=2

假设执行过程中写完 redo log 日志后,binlog 日志写期间发生了异常,会出现什么情况呢?

由于 binlog 没写完就异常,这时候 binlog 里面没有对应的修改记录。因此,之后用 binlog 日志恢复数据时,就会少这一次更新,恢复出来的这一行c值是0,而原库因为 redo log 日志恢复,这一行c值是1,最终数据不一致。

为了解决两份日志之间的逻辑一致问题,InnoDB 存储引擎使用两阶段提交方案。

原理很简单,将 redo log 的写入拆成了两个步骤preparecommit,这就是两阶段提交

使用两阶段提交后,写入 binlog 时发生异常也不会有影响,因为 MySQL 根据 redo log 日志恢复数据时,发现 redo log 还处于prepare阶段,并且没有对应 binlog 日志,就会回滚该事务。

 再看一个场景,redo log 设置commit阶段发生异常,那会不会回滚事务呢?

 并不会回滚事务,它会执行上图框住的逻辑,虽然 redo log 是处于prepare阶段,但是能通过事务id找到对应的 binlog 日志,所以 MySQL 认为是完整的,就会提交事务恢复数据。


http://www.ppmy.cn/embedded/113770.html

相关文章

使用three.js+vue3完成无人机上下运动

效果图如上 代码&#xff1a; <template><div class"drones"><div ref"dronesContainer" class"drones-container"></div></div></template><script setup>import { ref, onMounted, onUnmounted, …

海鲜市场|基于springboot的网络海鲜市场系设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已…

k8s pod网络故障注入,命令行实现

工具介绍 crictl工具&#xff1a;用于查询k8s pod和容器信息nsenter工具&#xff1a;用于进入容器的网络命名空间tc工具&#xff1a;注入网络故障 实现k8s pod级别网络故障 首先查找故障注入的pod的宿主机&#xff0c;并ssh登陆进去 kubectl get pod -n <namespace> …

无人机建模详解!!!

一、无人机拍摄 1. 准备工作 了解场地信息&#xff1a;在规划航线之前&#xff0c;需要了解场地的范围、地貌、树木遮挡情况、建筑和树木高度等&#xff0c;以便为后续的规划航线提供帮助。 选择拍摄时间&#xff1a;最佳拍摄条件为光线充足且风速较小的天气的10点-16点&…

swiftUI结构体数组修改属性UI没更新

SwiftUI使用了值语义&#xff0c;即当数组的值发生更改时&#xff0c;SwiftUI无法检测到具体的更改操作。 要解决这个问题&#xff0c;可以使用SwiftUI中的State属性包装器来创建一个可观察的状态变量。当数组发生更改时&#xff0c;通过更改状态变量的值来触发列表的更新,但是…

「铭记历史 珍爱和平」勿忘9.18!

93年前的今天 记忆着血与火 这是刻在中华民族 心口上的一道伤疤 中国人民永不忘记&#xff01; 2021年9月18日拍摄的辽宁省沈阳市“九一八”历史博物馆的残历碑。新华社记者 潘昱龙 摄 1931年9月18日 日军炸毁沈阳柳条湖附近 南满铁路路轨 反诬中国军队所为 随后炮轰东…

【机器学习导引】ch2-模型评估与选择

文章目录 经验误差与过拟合 &#xff08;Empirical error &overfitting&#xff09;1. **均方误差&#xff08;Mean Squared Error, MSE&#xff09;**2. **均方根误差&#xff08;Root Mean Squared Error, RMSE&#xff09;**3. **平均绝对误差&#xff08;Mean Absolute…

【C#】添加临时环境变量

在C#中&#xff0c;可以通过System.Environment类来添加临时环境变量。临时环境变量只在当前进程中有效&#xff0c;进程结束后变量即失效&#xff0c;不会写入系统的Path中。 using System;class Program {static void Main(){// 设置临时环境变量Environment.SetEnvironment…

Dom4j使用xpath查询xml文

Dom4j使用xpath查询带有命名空间的xml文件 方式1 忽略命名空间 DocumentFactory factory DocumentFactory.getInstance(); SAXReader reader new SAXReader(factory); Document document reader.read(xmlFilePath); Element rootElement document.getRootElement(); Nod…

【服务器】shell脚本之Docker创建nginx

#!/bin/bash# 定义目标目录和配置文件路径 BASE_DIR"/opt/docker/nginx"ETC_DIR"$BASE_DIR/etc" ETC_CONF_DIR"$ETC_DIR/conf.d" SSL_DIR"$ETC_CONF_DIR/ssl" LOG_DIR"$BASE_DIR/log"HTML_DIR"$BASE_DIR/html"C…

面向开发者的LLM入门教程(学习笔记01)

关注B站可以观看更多实战教学视频&#xff1a;hallo128的个人空间 面向开发者的LLM入门教程&#xff08;学习笔记01&#xff09; 吴恩达老师的《Prompt Engineering for Developer》课程 一、简介 1.LLM的定义 大语言模型&#xff08;LLM&#xff09; 的更强大功能是能通过…

程序设计题(49-56)

第四十九题 题目 请编写函数void fun(int *dp, int n, int upordown)&#xff0c; 其功能是&#xff0c;找出dp所指数组中的 最小或最大值&#xff0c;并与其第1个元素交换。形参n为元素的个数&#xff0c; 形参upordown为查找标志:值为0时找最小值;值为1时找最大值。 #in…

信息安全数学基础(17)Wilson定理

前言 Wilson定理&#xff08;Wilsons Theorem&#xff09;是数论中的一个基本定理&#xff0c;它揭示了素数与其阶乘之间的一个重要关系。 一、表述 对于任意素数p&#xff0c;有(p−1)!≡−1(modp)&#xff0c;其中(p−1)!表示p−1的阶乘&#xff0c;即123⋯(p−1)。 这个定理…

《自然语言处理 Transformer 模型详解》

一、引言 在自然语言处理领域&#xff0c;Transformer 模型的出现是一个重大的突破。它摒弃了传统的循环神经网络&#xff08;RNN&#xff09;和卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;完全基于注意力机制&#xff0c;在机器翻译、文本生成、问答系统等众多任…

算法-排序算法(冒泡选择插入希尔快速归并堆)

1.算法概述 1.1什么是算法 算法是特定问题的求解步骤的描述&#xff0c;是独立存在的一种解决问题的思想和方法。对于算法而言计算机编程语言并不重要&#xff0c;可以用任何计算机编程语言来编写算法。 程序数据结构算法 1.2数据结构和算法的区别和联系 数据结构只是静态…

supermap iclient3d for cesium场景加载雨雪效果,并加载相应材质

首先新建一个文件夹来存放材质&#xff0c;我选择src/assets/MaterialJson snow.json,复制粘贴,雨雪用一个就行了 {"material": {"id": "DA82AFCB-129A-4E66-995A-9F519894F58D","cullMode": "none","alphaMode"…

[论文笔记] LLM端侧小模型篇——1、剪枝量化的latency

接 LLM大模型剪枝篇&#xff0c;开启LLM端侧小模型篇的极致0成本部署之路&#xff5e;&#xff01;&#xff01;&#xff01;&#xff01; 剪枝效果 量化效果 推理框架 MLC-LLM&#xff1a;编译器方式推理&#xff0c;跨平台可用推理框架 https://huggingface.co/mlc-ai

STM32 芯片启动过程

目录 一、前言二、STM32 的启动模式三、STM32 启动文件分析1、栈 Stack2、堆 Heap3、中断向量表 Vectors3.1 中断响应流程 4、复位程序 Reset_Handler5、中断服务函数6、用户堆栈初始化 四、STM32 启动流程分析1、初始化 SP、PC 及中断向量表2、设置系统时钟3、初始化堆栈并进入…

装杯 之 Linux 指令1

hello&#xff0c;欢迎来到linux世界&#xff0c;在害没有学习linux时&#xff0c;看到别人操作&#xff0c;网课&#xff0c;真高级&#xff0c;感觉好厉害&#xff0c;就是说白了&#xff0c;看起来牛逼。ok&#xff0c;接下来&#xff0c;请大佬们进入linux之旅。 1.ls指令…

vue 给循环列表的选中项加样式

在Vue 3中&#xff0c;给循环列表中的选中项加样式可以通过使用v-bind或:class绑定来实现。你可以维护一个数据属性来记录选中的项&#xff0c;并根据这个属性来给不同的项添加特定的类名。 以下是一个简单的例子&#xff1a; <template><div><ul><liv-…