MySql的redo log

文章目录

  • 什么是redo log
  • redo log 组成
  • 数据更新流程
  • 两阶段提交
  • binlog
  • 为什么要两阶段提交
  • 结语

数据库事务的4个特性之一的持久性是数据库保证数据一致性的关键,mysql为了确保事务在系统崩溃后也能恢复,引入了redo log 重做日志这一机制。

什么是redo log

持久性指的是一旦事务提交数据就要永久的保存到数据库中,不能因为数据库的重启而导致数据丢失,其实就是落到磁盘上。如果每次事务的提交都直接写入到磁盘中那么数据肯定就不会丢失了,但是这里有一个问题,数据库数据的落盘是随机读写,这样的话就不知道慢到哪里去了,所以要先把数据保存到缓存池中,过一段时间在刷到磁盘,但是这个时候宕机就可能造成数据丢失,为此又设计了redo log. redolog只记录事务对数据页做了哪些修改,数据页是缓存池中的最小单位,redolog记录的是物理修改,比如说xx空间xx页xx位置xx值。

redo log 组成

redolog分为两个部分,一部分是日志缓存(redo log buffer),一部分是日志文件(redo log file),redolog先写日志缓存,然后特定时机在写入日志文件,一般是三种情况,每秒刷新一次,事务两次提交的时候,log buffer剩余空间小于1/2的时候,日志缓存是循环写的,可以理解为一个环,日志里面还有两个偏移量,一个是写偏移量,一个是已经擦除的位置,就是记录哪些已经更新到数据库了,如何写偏移量追上了擦除偏移量就表示缓存满了,需要落盘写如数据库了。

数据更新流程

  1. 服务器收到事务开始的指令,为事务生成一个全局唯一的事务ID,redolog和binlog中都会写入这个事务ID。
  2. 先在缓存页中找到需要更新的数据,如果没有先再磁盘加载缓存,这个时候加载的不是一条记录,是一个缓存页。
  3. 根据更新指令将缓存页中的数据更新
  4. 将修改的数据记录到日志缓存中也就是redo log buffer,根据redo log buffer的策略这个时候回不定时的刷新到磁盘
  5. 服务器收到事务提交的指令,将redo log buffer刷新到磁盘,并将事务改为prepare状态。
  6. 刷新bin log到磁盘
  7. 将redo log buffer中的prepare状态改为commit状态,并写入磁盘,事务结束。

两阶段提交

两阶段提交(Two-Phase Commit,简称2PC)是一种在分布式系统中确保事务一致性的协议。它主要用于数据库领域,以保证在分布式系统中的所有节点在进行事务处理时能够保持原子性和一致性。这个协议特别适用于那些需要跨多个节点或服务进行事务处理的场景。Redo log中的两阶段提交 指的是事务提交之后redo log中先改为prepare状态,然后再改为commit状态

binlog

binlog我们一般叫做归档日志,他是mysql服务器层的日志,跟存储引擎无关,他记录的是所有DDL和DML的语句,不包含查询语句,binlog是一种逻辑日志,他记录的是sql语句的原始逻辑,binlog写满后会切换到下一个日志继续写,不会覆盖以前的日志。

binlog有两个重要是使用场景:

  • mysq主从复制的时候:主机开启binlog,主机会将binlog同步复制该从节点,从节点通过读取binlog来同步主节点的数据
  • mysql的数据恢复:通过使用binlog工具结合binlog可以将数据恢复到数据库某一时刻

binlog 是数据库本身提供的日志,redolog是数据库引擎的日志。

为什么要两阶段提交

为什么要两阶段提交呢?因为两个文件的一致性,bin log 和Redo log。

先看下如果宕机了 数据怎么恢复。如果在prepare阶段还没写入binlog的时候宕机了,恢复的时候先读redolog,发现事务在prepare,再去读binlog,发现binlog没有这个事务,回滚就可以了,如果写完binlog,还没commit的时候宕机了,那就恢复数据就好了,这么问题。
再来看如果没有两阶段提交,那就得先看先写binlog,还是先写redolog,先写binlog,还没有写redolog,数据恢复的时候不一致,如果有从节点的话,从几点会多数据,主节点会丢数据,先写redolog再写binlog,会导致从节点丢数据。
但是不开启binlog的话,那其实就不用考虑二次提交了,直接写redolog置为commit也不会有问题,因为不需要考虑两个文件的一致性了,为了提高读写效率加了redolog,为了binlog和redolo的一致性事务完成性,又加了二次提交

结语

后来我在想如果没有redolog,直接用binlog可不可以,既然官方这么设计了,那肯定是有理由的。我想binlog记录的不是具体的物理数据,记录的事DDL和DML语句,如果数据恢复的话可能就会出问题了,比如说我放缓存的数据丢失了,那么应该从哪里恢复呢?根本没法记录,更别提恢复数据了。而且Mysql最开始是没有InnoDb引擎的,自带的引擎是MyLSam,Mylsam不支持事务,也没有崩溃恢复的能力,后来才有了InnoDb支持事务,所以才有了引擎层的日志Redolog,具体对不对就不知道了,用就好了

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

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

相关文章

2024前端面试题大全

2024前端面试题大全涵盖了多个方面,包括HTML、CSS、JavaScript、Vue、React等前端技术。‌ HTML和CSS面试题 ‌HTML5新特性‌:包括绘画canvas、媒体回放元素video和audio、本地离线存储localStorage和sessionStorage、语义化更好的内容元素如article、…

大厂面试真题-说说jdk1.7和1.8的hashmap的区别以及各自的问题

JDK 1.7和JDK 1.8中的HashMap存在显著的区别,并且各自存在一些问题。以下是对两者的详细对比及问题分析: 一、区别 底层数据结构: JDK 1.7:HashMap的底层结构是由数组(也被称为“位桶”)和链表构成。当has…

向日葵下载教程以及三款远程控制工具推荐!!!

向日葵远程控制下载教程!! 亲爱的朋友们,如果你对远程控制软件有所需求,那么向日葵绝对是一个不错的选择。现在我将带你走一遍向日葵的下载流程。 1. 打开你的浏览器,输入“向日葵官方网站”,进入官方网站…

presence_of_element_located() takes 1 positional argument but 2 were given

错误提示是 TypeError: presence_of_element_located() takes 1 positional argument but 2 were given,这表明 presence_of_element_located 期望接收一个参数,但传递了两个。 问题原因 在 selenium.webdriver.support.expected_conditions 中&#xf…

线性回归逻辑回归-笔记

一、线性回归(Linear Regression) 1. 定义 线性回归是一种用于回归问题的算法,旨在找到输入特征与输出值之间的线性关系。它试图通过拟合一条直线来最小化预测值与真实值之间的误差。 2. 模型表示 线性回归模型假设目标变量(输…

【黑苹果】记录MacOS升级Sonoma的过程

【黑苹果】记录MacOS升级Sonoma的过程 一、硬件二、提前说明三、准备OC四、选择驱动五、选择ACPI六、下载内核扩展七、其他问题 一、硬件 设备是神舟zx6-ct5da 具体参照下图 二、提前说明 本机器已经安装过 macOS Monterey 12.6,这次是升级到 macOS Sonoma 14。 …

测试教程分享

前几年在腾讯课堂上发布了不少课程,后来腾讯课堂改革,要收会员费,课程还要抽提程,这么下来就相当于白干了。就放弃了在上面发课程,再后来腾讯课堂就关闭了,以前发布的视频就没有地方发了,于是我…

火车头采集器易优cms采集发布模块下载

火车头采集器发布数据到易优cms(Eyoucms)的详细流程: 1. 火车头采集器易优cms(Eyoucms)发布模块下载地址: 火车头Eyoucms发布模块插件下载-CSDN 2. 在火车头导入下载的易优cms采集发布模块; …

uniapp学习(003-2 vue3学习 Part.2)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第15p-第p20的内容 文章目录 事件监听以及组件内置事件处理自定义模板快速创建uniapp条件渲染 v-if和v-elsev-e…

一分钟带你认清Java抽象类

abstrat——抽象,抽象类真的有像它的名字一样那么抽象吗?其实不然,它只是一个比较特殊的类别,我们只需要简单地认清它的作用就行,一起来看看吧~ 抽象类的概念 首先我们要明确一个事情:在面向对象的概念中&…

spring boot 项目配置文件

第一种properties文件(自带基础) 新建项目是会在resources目录下默认properties文件 第二种yml文件(常用) 格式类型:spring boot支持3种配置文件,分别是xx.properties,xx.yaml,xx.yml;同一个项目若配置这3种…

2024软考网络工程师笔记 - 第4章.局域网和城域网

文章目录 局域网基础1️⃣局域网和城域网体系架构 IEEE(负责链路层)2️⃣局域网拓扑结构 🕑CSMA/CD1️⃣CSMA/CD2️⃣CSMA/CD三种监听算法3️⃣冲突检测原理 🕒二进制指数退避算法1️⃣ 二进制指数退避算法 🕓最小帧长…

【JavaScript】LeetCode:71-75

文章目录 71 搜索插入位置72 搜索二维矩阵73 在排序数组中查找元素的第一个和最后一个位置74 搜索旋转排序数组75 寻找旋转排序数组中的最小值 71 搜索插入位置 二分查找在最后一轮比较中,mid所指向的值 > target,right往左收,此时left所指…

R语言实现多元线性回归高杠杠点,离群点分析

14a set.seed(1) x1 = runif(100) x2 = 0.5 * x1 + rnorm(100)/

【自然语言处理】Encoder-Decoder模型中Attention机制的引入

在 Encoder-Decoder 模型中引入 Attention 机制,是为了改善基本Seq2Seq模型的性能,特别是当处理长序列时,传统的Encoder-Decoder模型容易面临信息压缩的困难。Attention机制可以帮助模型动态地选择源序列中相关的信息,从而提高翻译…

云原生、云计算、虚拟化概念概述

(带着批评阅读,不对的请评论区补充) 1、出现年代前后顺序 虚拟化------>云计算------>云原生 2、虚拟化 虚拟化侧重描述实现,最开始的技术是模拟、hook指令执行软件程序,后续出现了半虚拟化、CPU硬件提供虚拟化…

【数据库MySQL作业】

(简答题) 1、按照结构表提示在数据库中创建数据表,要求使用SQL 语句实现。 2、按照下列要求完成操作,要求使用SQL 语句实现。 (1) 为读者表 reader 指定检査约束,即指定性别 sex 字段的值只能是“男”或“女”。 (2) 修改读者表reader 的默认…

追加word,返回中第 k 个字符的值

Alice 和 Bob 正在玩一个游戏。最初,Alice 有一个字符串 word "a"。 给定一个正整数 k。 现在 Bob 会要求 Alice 执行以下操作 无限次 : 将 word 中的每个字符 更改 为英文字母表中的 下一个 字符来生成一个新字符串,并将其 追加 到原始的…

RAG中向量召回怎么做

目录 1. 文档嵌入 2. 查询处理 3. 向量搜索 4. 结果融合 5. 实现细节 使用 FAISS 进行向量召回 在检索增强生成(Retrieval-Augmented Generation, RAG)框架中,向量召回是一个关键步骤,它涉及到从一个大规模的文档库或知识库…

华为---Super VLAN简介及示例配置

目录 1. Super VLAN技术产生背景 2. Super VLAN概念 3. Super VLAN应用场景 4. Super VLAN工作原理 5. Super-VLAN主要配置命令 6. Super-VLAN主要配置步骤 7. 示例配置 7.1 示例场景 7.2 网络拓扑 7.3 配置代码 7.4 代码解析 7.5 测试验证 1. Super VLAN技术产生背…