MySQL redo log、undo log、binlog

MySQL是一个广泛使用的关系型数据库管理系统,它通过一系列的日志来保证数据的一致性和持久性。在MySQL中,有三个重要的日志组件,它们分别是redo log(重做日志)、undo log(回滚日志)和binlog(二进制日志)。在下面的博客内容中,我将介绍这三个组件的实现原理。

MySQL Redo Log(重做日志)

重做日志(redo log)是MySQL的一种事务日志,它用于恢复已经提交的事务对数据库所做的修改。它的实现原理如下:

  1. 持久性:重做日志是以一种顺序追加的方式写入到磁盘上的一个特殊文件中,这种方式可以提高写入性能。重做日志的写入是通过写入日志缓冲区(log buffer)来完成的,当事务提交时,相关的重做日志记录会被刷新到磁盘上的重做日志文件。

  2. 循环写入:重做日志采用循环写入的方式,即当写满了日志文件后,会回到文件开头继续写入,这样可以循环利用已经写满的空间。重做日志会定期进行检查点(checkpoint),将已经提交的事务的日志记录持久化到磁盘上,并释放相应的空间。

  3. 崩溃恢复:当数据库发生崩溃或意外断电等情况时,MySQL可以利用重做日志进行崩溃恢复。在数据库重新启动时,通过重做日志中记录的操作,可以将未持久化到磁盘上的事务修改重新应用到数据库中,从而恢复数据库到崩溃之前的状态。

MySQL Undo Log(回滚日志)

回滚日志(undo log)是MySQL的另一种事务日志,它用于实现事务的原子性和一致性。它的实现原理如下:

  1. 事务回滚:当一个事务需要回滚时,MySQL可以利用回滚日志来撤销该事务对数据库所做的修改。回滚日志中记录了每个事务所做的修改操作的逆操作,通过撤销这些逆操作,可以将数据库恢复到事务开始之前的状态。

  2. MVCC支持:回滚日志还用于支持MySQL的多版本并发控制(MVCC)机制。在MVCC中,每个事务在开始时都会创建一个对应的回滚日志,用于存储该事务所做的修改。其他事务在读取数据时,会根据回滚日志中的信息来判断是否可以看到该数据的修改。

  3. 垃圾回收:回滚日志中的记录并不是永久存储的,一旦事务提交或回滚完成,相应的回滚日志记录就可以被清除。MySQL会定期进行垃圾回收操作,将已经不再需要的回滚日志记录删除,以释放空间。

MySQL Binlog(二进制日志)

二进制日志(binlog)是MySQL用于记录数据库的所有修改操作的日志。它的实现原理如下:

  1. 格式与记录:二进制日志以一种特定的格式记录了数据库的修改操作,包括对表的插入、更新和删除等操作。每个记录都包含了操作类型、影响的表和修改的数据等信息。

  2. 复制与恢复:二进制日志可以用于数据库的备份和恢复。通过将二进制日志应用到一个空的MySQL实例中,可以将该实例恢复到与原始实例相同的状态。二进制日志还可以用于数据库的复制,即将一个MySQL实例的修改操作同步到其他实例上。

  3. 断点续传:二进制日志支持断点续传的功能。当数据库出现异常崩溃或意外断电时,可以通过二进制日志将数据库恢复到崩溃之前的状态,并继续之后的操作,从而实现断点续传的效果。

总结起来,MySQL的redo log、undo log和binlog是三个重要的日志组件,它们分别用于数据库的恢复、回滚和备份等功能。它们的实现原理有所不同,但都起着保证数据一致性和持久性的重要作用。

实现日志后的更新流程

在这里插入图片描述

  1. 数据写过程:上图
  2. 可能存在数据丢失:看binlog和redolog日志的写入机制
  3. 如何保证一定不丢失:使用
  4. WAL机制

基于2PC的一致性保障

保证binlog和redolog的一致性

假设Redo Log刷入成功了,但是还没来得及刷入Binlog MySQL就挂了。此时重启之后会发现Redo Log并没有Commit标识,此时根据记录的XA事务找到这个事务,进行回滚。
如果Redo Log刷入成功,而且Binlog也刷入成功了,但是还没有来得及将Redo Log从Prepare改成Commit MySQL就挂了,此时重启会发现虽然Redo Log没有Commit标识,但是通过XID查询到的Binlog却已经成功刷入磁盘了。
此时,虽然Redo Log没有Commit标识,MySQL也要提交这个事务。因为Binlog一旦写入,就可能会被从库或者任何消费Binlog的消费者给消费。如果此时MySQL不提交事务,则可能造成数据不一致。而且目前Redo Log和Binlog从数据层面上,其实已经Ready了,只是差个标志位。

在这里插入图片描述
Prepare阶段,将Redo Log写入文件,并刷入磁盘,记录上内部XA事务的ID,同时将Redo Log状态设置为Prepare。Redo Log写入成功后,再将Binlog同样刷入磁盘,记录XA事务ID。

Commit阶段,向磁盘中的Redo Log写入Commit标识,表示事务提交。然后执行器调用存储引擎的接口提交事务。这就是整个过程。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

[04-07]最新精选绿色软件每日更新(小熊整理)

[主页浏览] 阿里云浏览器 1.6.5.2025 Beta [网络工具] QQ玫瑰小镇辅助 1.42 [网络工具] 拇指玩安卓游戏安装器 1.07 [网络工具] LOL撸至深(辅助工具) 1.12 [网络工具] 模拟人生3 金钱修改器 [网络工具] 三国群英传7 修改器 [网络工具] 生化危机5修改器 3.1 [网络工具] 生…

华为OD机试真题 Java 实现【高矮个子排队】【2023Q2 100分】,附详细解题思路

一、题目描述 现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高…

python 社区发现算法

转载:这个Python库超级棒啊,包含Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能_11205354的技术博客_51CTO博客 熟知社区发现算法,你不能错过这个 Python 库。它涵盖 Louvain 算法、Girvan-Newman 算法等…

AI版女网红“半藏森林”上线,服务项目让人意想不到

目前首批网红明星“AI克隆人”已提前上线,主营业务就是打造各种名人版AI聊天机器人,用户付费便可与之聊天。其后台报名参加AI克隆人的网红明星“全网粉丝总数已超过5亿”。该公司这波上线的网红明星AI克隆人,包括此前因“疑似插足他人恋情”&…

SSD源码总结

一、生成默认框 默认框的宽高 默认框的宽高是相对于原图的尺寸计算出来的。 默认框的中心 默认框的中心是相对于特征图的尺寸计算出来的。 二、将真实框分配给默认框 1、区分正负样本 1.1、选取正样本 计算真实框(bboxs)与每个默认框(…

组合数学第五讲

Catalan numbers(卡特兰数) 先通过平衡括号引入卡特兰数序列的概念 1,2,5,14,...,这些数构成了卡特兰数序列,分别代表一共有i个括号时,括号排列构成的合法方案数【从左到右如果所有括号都能依次配对即是合…

Niagara—— Texture Sample 与 Particle Subuv 区别

一,Texture Sample 此节点是最基本的采样节点,依据UV坐标来采样Texture; MipValueMode,设置采样的Mipmap Level; None,根据当前Texture大小和物理缩放,自动选择合适的 Mipmap Level &#xff1b…

将数组中的每一位元素依次循环向后移一位

#include<iostream> using namespace std; int main() {int a[10],i,t,k;for(i0;i<10;i){cin>>a[i];}ka[9];for(i9;i>0;i--){ta[i];a[i]a[i-1];a[i-1]t;}a[0]k;for(i0;i<10;i){cout<<a[i]<<" ";}cout<<endl;return 0; }

定义一个函数,统计具有n个元素的一维数组中大于等于所有元素平均值的元素的个数并返回这个值

#include<iostream> using namespace std; int Count(double a[6],int n) {int average,i,s0,k0;for(i0;i<n;i){ssa[i];}averages/n;for(i0;i<n;i){if(a[i]>average)k;}return k; } int main() {int i,k,n;cout<<"请输入数组的大小n:"<<e…

(附源码)springboot自行车在线租赁管理系统 毕业设计101157

Springboot自行车在线租赁系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对自行车租赁等…

240:vue+openlayers上传CSV文件,在地图上显示信息

第240个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers上传CSV文件,在地图显示,点击点后,显示点信息。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果使用的csv…

阿啊-有意思的表情包

阿啊&#xff0c;英文名为Ah-Ah&#xff0c;诞生于2019年8月&#xff0c;是一只角度固定、不知是啥的二维生物(也可能不是生物)。准确的来说&#xff0c;这是一个系列表情包&#xff0c;从官网上可以下载&#xff0c;目前已经推出了好几个版本。当然&#xff0c;还支持在线制作…

如何制作搞笑表情包

表情包已经成为我们生活聊天中必不可少的一部分&#xff0c;但是如何制作搞笑表情包呢&#xff1f;自己制作的表情包更加独有个性&#xff0c;今天小编带大家看一波原创表情包的制作方法吧&#xff01;使用工具&#xff1a;电脑操作方法&#xff1a;1、首先在手机上也是可以制作…

红包表情包封面怎么制作,沙雕表情包怎么制作,送你行走的表情包

对于很多小伙伴来说&#xff0c;可能制作一个红包封面还是有一定难度的&#xff0c;不过发红包是可以插入表情包的&#xff0c;我想表情包大家都有吧。 没有怎么办呢&#xff1f;那就动手制作呗&#xff01; 如果你是个设计高手完全就不在话下&#xff0c;完全可以设计出自己…

如何用python绘制一系列三维的逗比风格表情包

如果你也想赚钱&#xff0c;实现财务自由&#xff0c;但接触不到优质的人脉和资源&#xff0c;可以到公June浩&#xff1a;成长home&#xff0c;发"资源" &#xff0c;就会看到我吐血整理的168条保姆级零基础吸金秘籍&#xff0c;跟着我一起亲历毕业5年、创业3年、从…

My Note of Diffusion Models

Diffusion Models Links: https://theaisummer.com/diffusion-models/ Markovian Hierachical VAE rvs: data: x 0 x_{0} x0​,representation: x T x_{T} xT​ ( p ( x 0 , x 1 , ⋯ , x T ) , q ( x 1 , ⋯ , x T ∣ x 0 ) ) (p(x_0,x_1,\cdots,x_T),q(x_1,\cdots,x_{T…

如何在html中插入表情包,怎么把表情包插入word

是下表情包已经成为一种流行&#xff0c;在word文档中&#xff0c;添加表情包&#xff0c;会给人一种生动亲切的感觉。那么如何在word中添加表情包呢&#xff1f;下面就来看看小编的方法吧。 表情包有很多种形式&#xff0c;例如动态表情&#xff0c;表情符号&#xff0c;静态图…

Github emoji 表情包大全

传送门&#xff1a;https://www.jianshu.com/p/72a4214764e4 https://www.webpagefx.com/tools/emoji-cheat-sheet/

深度学习了40万个表情,一大波AI 表情包来了

自从有了表情包&#xff0c;跟人聊天时的第一反应&#xff0c;就是去找找看有什么适合的表情。 有一类表情包&#xff0c;形式是文字图&#xff0c;尤其能够精妙地抒发和传递感情。 在这一点上&#xff0c;可能全世界的网友都一样。 好用的表情永远不嫌多&#xff0c;而且似乎总…

进击的巨人有趣表情包

image 下载地址: 进击的巨人_BQB/进击的巨人00001-戴拿.gif image 下载地址: 进击的巨人_BQB/进击的巨人00002-莱纳你坐呀.gif image 下载地址: 进击的巨人_BQB/进击的巨人00003-逐渐变得精彩起来了.jpg image 下载地址: 进击的巨人_BQB/进击的巨人00004-醉酒的等级-尤弥尔希斯…