MySql的redo log

news2024/10/17 2:39:10

文章目录

  • 什么是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.coloradmin.cn/o/2216728.html

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

相关文章

老照片修复工作流教程:用 ComfyUI 轻松还原历史记忆

你是否有过这样的遗憾? 那些珍贵的老照片因为时间的流逝,早已失去了当年的色彩,变得模糊、褪色,甚至破损? 今天带你了解如何使用 ComfyUI 的老照片修复工作流,通过简单的几步操作,在短短十几秒…

三亚旅游微信小程序的设计与实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

【深度学习代码调试1】环境配置篇(上) -- 安装PyTorch(安利方法:移除所有国内源,使用默认源)

【深度学习代码调试1】环境配置篇 -- 安装TensorFlow和PyTorch 写在最前面1. 创建新的Conda环境2. 安装PyTorch及相关库(可以直接跳到2.3安装方法)2.1 检查CUDA版本2.2 解决安装过程中常见问题2.2.1 超时问题(这个不是最终解决方案&#xff0…

AUTOSAR_EXP_ARAComAPI的5章笔记(13)

☞返回总目录 5.4.7 事件(Events) 在骨架侧,服务实现负责通知事件的发生。如 5.4.2 RadarService Skeleton Class 所示,骨架为每个事件提供一个事件包装类的成员。骨架的事件包装类与代理的事件包装类看起来明显不同。 在骨架端…

论文阅读:On determining the hinterlands of China‘s foreign trade container ports

集装箱港口腹地的边界线,只要存在,就可以作为未来港口发展和基础设施规划的参考点。在早期划定中国港口腹地的努力中,要么考虑的港口数量有限,要么仅根据港口总吞吐量划定腹地。因此,这些研究都没有让我们清楚地了解共…

快速理解AUTOSAR CP的软件架构层次以及各层的作用

在 AUTOSAR CP 的架构中,软件分为 应用层 (App)、运行时环境 (RTE) 和 基础软件层 (BSW) 三个主要层级。下面是每一层的主要功能与简单的代码示例来展示它们之间的关系。 1. 概述 应用层 (App):包含应用程序代码,主要实现业务逻辑。应用层通…

DeepFM模型代码详解

直到看到这篇文章,我才搞明白类别特征怎么做lookup的,也看明白了代码逻辑。如果你看完没懂,私信留下wx,给你讲懂。 1、Deepfm 的原理,DeepFM 是一个模型还是代表了一类模型,DeepFM 对 FM 做了什么样的改进…

【时时三省】(C语言基础)函数介绍strcat

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 strcat 字符串追加 示例: 比如我要把world加到hello后面去 就可以用这个 还有一种方法是这样 这两个代码的意思是一样的 只是写法不一样 写的时候要注意这些 •源字符串必须…

DAB-DETR: DYNAMIC ANCHOR BOXES ARE BETTER QUERIES FOR DETR论文笔记

原文链接 [2201.12329] DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR (arxiv.org)https://arxiv.org/abs/2201.12329 原文笔记 在本文中,我们提出了一种新的查询公式,使用动态锚框进行DETR (DEtection TRansformer),并对查…

探索人工智能在数学教育上的应用——使用大规模语言模型解决数学问题的潜力和挑战

概述 论文地址:https://arxiv.org/abs/2402.00157 数学推理是人类智能的重要组成部分,人工智能界不断寻求应对数学挑战的方法,而在这一过程中,人工智能的能力需要进一步提高。从文本理解到图像解读,从表格分析到符号操…

大数据|MapReduce编程原理与应用

在大数据时代的浪潮中,MapReduce作为一种高效处理海量数据的编程模型,自其诞生以来便成为了数据处理领域的基石。本文旨在深入探讨MapReduce的基本原理、典型应用以及其在未来技术发展趋势中的展望,帮助读者更好地理解并应用这一关键技术。 一…

数制转换及交换机

数制转换 非位置化数字系统:罗马数字 位置化数字系统:二进制,八进制,十进制,十六进制 十进制数: 符号:2 2 2位置:2 1 0位权:该数字的真实大小 该位置上的数基数的位置…

如何设计开发RTSP直播播放器?

技术背景 我们在对接RTSP直播播放器相关技术诉求的时候,好多开发者,除了选用成熟的RTSP播放器外,还想知其然知其所以然,对RTSP播放器的整体开发有个基础的了解,方便方案之作和技术延伸。本文抛砖引玉,做个…

所有程序员的白嫖圣地-github

内容汇总 认识github页面如何从github下载资源git配置如何通过github管理工程代码 有人问github怎么用,几分钟了解这个每个程序员都在用的白嫖圣地。 打开github主界面,映入眼帘的是Home面板,它的作用是显示我们关注的人、点赞的项目等更新…

一款非常有用且高效的国产的Linux运维面板:1Panel介绍

1Panel介绍 一、1panel介绍二、1panel的安装1、不同系统安装2、安装日志3、访问地址 三、1panel的卸载1、停止服务2、卸载服务3、清理残留文件4、清除日志文件5、验证卸载是否成功 四、1panel的功能介绍1、服务器资源使用情况快速监控2、文件管理器简单易用3、创建和管理网站轻…

【Linux操作系统】进程等待

目录 一、什么是进程等待?二、为什么要进行等待?三、进程等待方法1.wait函数2.waitpid3.status阻塞等待和非阻塞等待(轮询等待)1.阻塞等待2.非阻塞等待 四、代码举例 一、什么是进程等待? "进程等待"是指一…

基于springboot摄影跟拍预定管理系统

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的,前后端分离。 开发语言:Java数据库:MySQL技术:…

Finops成本优化企业实践-可规划篇

引言:本篇假设我们要在云上新增一个应用,讨论其在单体、failover、DR、集群模式下的成本规划。 假设该应用base on Linux,硬件要求是8cores、64G mem的云主机,并搭配500g内存,至少部署在一台云主机上。我们有开发、测…

Java项目: 基于SpringBoot+mysql+maven+vue林业产品推荐系统(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenvue林业产品推荐系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操…

【Linux】解锁软硬链接奥秘,高效动静态库管理的实战技巧

软硬连接和动静态库 1. 软链接1.1. 概念1.2. 特点1.3. 应用场景 2. 硬链接2.1. 概念2.2. 硬链计数2.3. 特点2.4. 应用场景 3. 动静态库3.1 库存在的原因3.2. 静态库制作与使用3.2.1 打包3.2.2. 使用 3.3. 动态库制作与使用3.3.1. 打包3.3.2. 使用 4. 解决动态库查不到的4种方法…