基于Redo log Undo log的MySQL的崩溃恢复

基于Redo log & Undo log的MySQL的崩溃恢复

Redo log Undo log

Redo log 重做日志,记录,修改过的数据
Undo log 回滚日志,记录修改之前的数据

两个我不做详细的介绍了,redo log就是记录哪些地方被修改了
undo log是记录修改之前我们的数据长什么样

更新流程

在这里插入图片描述

我们来捋一下这个流程,首先是更新数据,会先去Buffer Pool中查找是否有这个页,如果说不存在这个页,就会从磁盘中加载,也就是第二步

第三步,有了这个页,我们需要先写Undo log,在一切开始之前,先记录没动过的样子

第四步,就是更新数据,先是写入Redo log Buffer中,因为一个事务中不止一个修改的地方,所以先写道Redo log Buffer中,一并写入到Redo log 文件中去

然后是写Binlog文件

其中有几点我们需要继续探讨

为什么要写入Redo log buffer中?我们修改完页,为什么不直接刷入到磁盘中去

这个问题很好理解,为什么修改之后,不直接刷入到磁盘去呢?因为这样子做,效率太低了,我们要刷入到磁盘的化,肯定是以页为单位的,一个页是16kb,而且还是随机IO,那样写的太慢了,我么redo log 文件,是顺序IO,性能快,而且不是完整的页

占用内存小,又快,肯定写到buffer中去,然后写到redo log file文件中啊

两阶段提交

binlog的一致性问题出现

你可能听过两阶段提交,就是为了解决binlog的一致性问题的

我们来想想,怎么会出现这个问题

刷盘的目的,无非就是两个目的,redo log写到磁盘中去,binlog写到磁盘中去

那无非就有两种方案
第一,先写redo log ,再写binlog
第二,先写bin log,再写redo log

第一种方案:
先写了redo log,bin log 还没写,MySQL宕机,redo log刷入了磁盘,bin log没有这条记录,此时bin log就丢失了记录,出现一致性问题

第二种方案:
先写bin log,redo log还没写,MySQL宕机,此时redo log没写,那么重启的时候,binlog 和redo log又不一样实际的数据又会丢失

所以我们必须保证一个事情,binlog 和 Redo log 必须保持一致性!!

为了这个目标就有两阶段提交,也就是2PC(two-phase commit protocool)

基于2PC

在这里插入图片描述
为了保证事务的一致性,所以就出现了2PC,它将事务的提交分成了两个不部分Prepare和Commit/Rollback

在这里插入图片描述

Prepare阶段,首先我们从Redo log Buffer种将Redo Log写入文件,然后刷入磁盘,记录上内部的XA事务的ID,同时将Redo log设置为Prepare状态,Redo log写入成功,再将Binlog同样刷入磁盘,记录XA事务的ID

Commit阶段,向磁盘种的Redo log写入Commit标识,表示事务提交,然后执行器调用存储引擎的接口提交事务.

验证

我们来验证两阶段提交是否可以保证一致性
首先,假设Redo log 刷入成功,但是还没来得及刷入Binlog,此时宕机,重启之后发现Redo log 没有commit标志,那么就会根据记录的XA事务Id找到这个事务,然后回滚

如果Redo log刷入成功,Binlog也刷入成功,还没来得及将Redo log从Prepare改成Commit,MySQL宕机,重启之后,发现虽然Redo log虽然没有commit标志,但是通过XA事务ID查询到的Binlog已经刷入到磁盘中去了额,此时MySQL也会提交事务

我比较困惑的时候,如果Redo log刷入盘了,打上了Prepare标志,但是写Binlog写到一半的时候,突然MySQL宕机了,此时还会有一致性问题,这里我先放下,之后我懂了再来更新这里的问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【双碳】Acrel-1000DP分布式光伏并网及数据采集与控制的方式

摘要: 在“双碳”、整县分布式光伏等相关政策的目标背景下,分布式新能源广泛建设,对分布式新能 源规划的科学性提出更高的要求,有源配电网调度面临大规模分布式新能源参与后的运行管理问题,增 大了电网运行管理的风险和…

索引使用规则3——SQL提示

SQL提示:当一个字段被多个索引时,系统会自动选择使用哪个索引,但是如果想自己选择使用哪个索引,需要加入一些认位的提示来达到优化操作的目的。 可以看到name这个字段被索引了两次 查看系统选择哪个索引 explain select * from t…

poi 设置允许西文在单词中间换行

说明本文是CSDN-问答模块,题主提问。问题描述:poi 设置允许西文在单词中间换行 一、问题描述 poi 设置允许西文在单词中间换行? // 创建一个新的文档XWPFDocument document = new XWPFDocument();// 创建段落XWPFParagraph firstParagraph = document.createParagraph();fir…

Leetcode : 215. 数组中的第 K 个最大元素

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 思路:最开始排序算法&…

LeetCode 2125.银行中的激光束数量

银行内部的防盗安全装置已经激活。给你一个下标从 0 开始的二进制字符串数组 bank ,表示银行的平面图,这是一个大小为 m x n 的二维矩阵。 bank[i] 表示第 i 行的设备分布,由若干 ‘0’ 和若干 ‘1’ 组成。‘0’ 表示单元格是空的&#xff0…

打卡今天内存管理

首先我们的体系结构是这样的,根据小林coding 来写的笔记 寄存器,速度非常快, 32位的可以存4个字节,64位的可以存8个字节 多少位只是在32位以上 地址空间 分为两种地址空间 : 物理,逻辑 地址空间 地址空间…

推荐5个python可视化库

你是否曾为数据可视化而烦恼? 在浩瀚的数据海洋中,如何将复杂的数据以直观、易懂的方式展现出来,成为了每个数据分析师和开发者必须面对的挑战。 幸运的是,我们有众多强大的可视化工具可以选择。 推荐5个Python可视化库&#x…

rtthread stm32h743的使用(四)pin设备使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验,核心板如图: 1.首先建立rtthread工程 2.添加相关程序如下,我们在上一节的代码中添加相关代码: #include &…

分享一点PDF中获取表格的探索过程

版面分析:如何得到标题、如何的得到段落(正确的段落)、如何得到表格、如何得到图片,图和得到图片上的文字? 还有细节问题:双栏和多栏的问题、公式问题 扫描件:扫描件本质上是图片,如…

oracle with check option 学习

with check option保证了通过视图进行的修改,必须也能通过该视图看到修改后的结果; 你插入,那么插入这条记录在刷新视图后必须可以看到; 如果修改,修改完的结果也必须能通过该视图看到; scott登录了以后创…

React中使用useActive

1.引入 import { useActivate } from "react-activation";2.React Activation 在React中使用react-activation,其实就是类似于Vue中的keep-alive,实现数据的缓存; 源码: import { ReactNode, ReactNodeArray, Context, Component…

YOLOv8改进,添加GSConv+Slim Neck,有效提升目标检测效果,代码改进(超详细)

目录 摘要 主要想法 GSConv GSConv代码实现 slim-neck slim-neck代码实现 yaml文件 完整代码分享 总结 摘要 目标检测是计算机视觉中重要的下游任务。对于车载边缘计算平台来说,巨大的模型很难达到实时检测的要求。而且,由大量深度可分离卷积层构…

2024-02-28(Kafka,Oozie,Flink)

1.Kafka的数据存储形式 一个主题由多个分区组成 一个分区由多个segment段组成 一个segment段由多个文件组成(log,index(稀疏索引),timeindex(根据时间做的索引)) 2.读数据的流程 …

Laravel - API 项目适用的图片验证码

1. 安装 gregwar/captcha 图片验证码接口的流程是: 生成图片验证码 生成随机的 key,将验证码文本存入缓存。 返回随机的 key,以及验证码图片 # 不限于 laravel 普通 php 项目也可以使用额 $ composer require gregwar/captcha2. 开发接口 …

51单片机(6)-----直流电机的介绍与使用(通过独立按键控制电机的运行)

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 目录 一. 直流电机模块介绍 1.直流电机介绍 2.电机参数 二. 程序设计…

Oracle 直接路径插入(Direct-Path Insert)

直接路径插入(Direct Path Insert)是Oracle一种数据加载提速技术,可以在使用insert语句或SQL*Loader工具大批量加载数据时使用。直接路径插入处理策略与普通insert语句完全不同,Oracle会通过牺牲空间,安全性&#xff0…

防御保护:防火墙内容安全

一、IAE(Intelligent Awareness Engine)引擎 二、深度检测技术(DFI和DPI) 1.DPI – 深度包检测技术 DPI主要针对完整的数据包(数据包分片,分段需要重组),之后对数据包的内容进行识别。&#x…

2024年阿里云2核4G云服务器性能如何?价格便宜有点担心

阿里云2核4G服务器多少钱一年?2核4G服务器1个月费用多少?2核4G服务器30元3个月、85元一年,轻量应用服务器2核4G4M带宽165元一年,企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…

第三节-docker-cs架构分析

一、组成 docker engine:docker-client、rest-api、dockerd containerd: 1、管理容器生命周期 2、拉取/推送镜像 3、存储管理 4、调用runc 5、管理网络 containerd-shim:相当于一个驱动,containerd通过containerd-shim驱使…

SpringCloudNacos配置管理及热更新

文章目录 统一配置管理在nacos中添加配置文件从微服务拉取配置配置热更新方式1方式2 配置优先级 之前对 Nacos注册中心入门 已经做了演示. 这篇文章对 Nacos 的服务分级存储模型做理论与实践. 本篇文章阐述 Nacos 做配置中心的理论和实践. 统一配置管理 当微服务部署的实例越…