redolog、undolog和binlog日志文件详解

redolog、undolog和binlog日志文件详解

  • 前言
  • redolog
    • 设计目标
    • 记录内容
    • 写入策略
  • undolog
    • 设计目标
    • 记录内容
    • 写入策略
  • binlog
    • 设计目标
    • 记录内容
    • 写入策略
  • 小结

前言

当谈论MySQL数据库的日志文件时,通常会涉及到三种主要类型:redo log(重做日志)、undo log(回滚日志)和binlog(二进制日志)。每种日志文件都有自己的设计目标、记录内容和写入策略,下面我会逐一介绍它们。

redolog

设计目标

  • 保证事务的持久性:Redo Log的主要设计目标是在数据库崩溃或发生故障时,确保已提交的事务对数据库的修改能够被恢复,以保证数据的一致性和持久性。
  • 提高性能:通过将数据修改操作写入重做日志,MySQL可以延迟将这些操作同步到磁盘,从而提高数据库的写入性能。

记录内容

  • Redo Log中记录了每个事务所做的修改操作,如插入、更新、删除等。这些记录通常以物理日志记录的形式存在,即记录了修改了哪些数据页的哪些字节。
  • 除了修改操作的内容外,Redo Log还包含了事务的一些元数据信息,如事务ID、事务状态等。

写入策略

  • Redo Log的写入是顺序追加(append)的方式进行的,即将事务的修改操作追加到日志文件的末尾。
  • Redo Log采用了WAL(Write-Ahead Logging)的机制,即在事务进行数据修改操作之前,先将对应的修改记录写入Redo Log,然后再将修改应用到内存中的数据页,这样可以确保事务的修改记录先于实际数据的修改被持久化到磁盘。

undolog

设计目标

  • 提供事务的回滚支持:Undo Log的主要设计目标是提供事务回滚的支持,即在事务发生错误或被回滚时,能够恢复到事务开始之前的状态。
  • 支持MVCC(Multi-Version Concurrency Control):Undo Log也是MVCC机制的重要组成部分,用于存储事务修改前的数据版本,以支持并发读取和写入。

记录内容

  • Undo Log记录了事务对数据的修改操作的逆操作,即对数据进行了什么修改,Undo Log中就记录了如何将数据恢复到修改前的状态。
  • Undo Log通常以逻辑日志记录的形式存在,记录了事务对数据的修改操作,如将某行数据修改为何种值、删除了哪些数据等。

写入策略

  • Undo Log的写入通常也是顺序追加的方式进行的,将事务的逆操作记录追加到日志文件的末尾。
  • Undo Log的写入顺序通常与事务的提交顺序相反,即先写入的事务的Undo Log记录会位于后面,这样可以确保在回滚操作时按照相反的顺序进行恢复。

binlog

设计目标

  • 数据复制与恢复:Binlog的主要设计目标是支持数据复制和恢复操作,以实现数据的备份、恢复和主从复制等功能。
  • 记录数据库变更:除了用于数据复制外,Binlog还可以用于记录数据库的变更历史,方便进行数据审计和恢复。

记录内容

  • Binlog记录了数据库中的修改操作,包括对表的增删改操作以及对表结构的变更操作等。
  • Binlog以一种较为简洁的格式记录了每个修改操作的元信息,如操作类型、受影响的表名、修改前后的数据等。

写入策略

  • Binlog的写入通常是异步的,即MySQL会将修改操作先写入到Binlog缓冲区中,然后由后台线程将缓冲区中的内容定期写入到Binlog文件中。
  • 对于复制从库,Binlog的写入通常会在事务提交后立即进行,以确保从库能够尽快获取到主库的数据变更。

小结

  • redo log用来保证事务的原子性和持久性,undo log用来事务回滚以及mvcc的功能,保证了事务的一致性,binlog用来实现数据的备份、恢复和主从复制等功能。
  • undo log 是逻辑日志,记录的是数据的逻辑修改信息。redo log 是物理日志,记录的是数据的物理修改信息。
  • undo log 仅用于回滚事务,不会被用于数据库恢复。redo log 既可以用于回滚事务,也可以用于数据库恢复。

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

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

相关文章

java8 LocalDateTime

LocalDateTime java8使用了LocalDateTime和DateTimeFormatter。比之前的Date和Carlendar有所改进。 DateTimeFormatter是线程安全的。DateTimeFormatter中很多属性使用了final修饰。 LocalDate: 只能设置仅含年月日的格式,表示没有时区的日期, LocalDate是不可变并…

ansible安装教程

一、启动系统前,加一块光驱,把安装镜像文件放到光驱中 二、配置Yum文件 [rootlocalhost ~]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# rm -f * [rootlocalhost yum.repos.d]# vi cdrom.repo [BaseOS] nameBaseOS baseurlfile:///media/BaseO…

【MAC】删除自带的输入法

问题描述 平常使用mac办公,经常会非预期切换到自带的ABC输入法,令人很困惑。 解决方案: 1、下载PlistEdit Pro 链接:https://www.fatcatsoftware.com/plisteditpro/ 2、执行命令 sudo open ~/Library/Preferences/com.apple.…

GEE案例——美国夏威夷火灾森林面积损毁程度分析

简介 本次案例的主要目的是通过查看两期影像间的差异来识别火灾的影像范围,所以这里用到了高清的sentinel-2影像,同时应用到了sentinel-2的QA高质量的去云后的影像进行分析。 数据 Cloud Score+ S2_HARMONIZED V1 Cloud Score+ 是一种用于中高分辨率光学卫星图像的质量评…

手把手教会你做属于自己的网站《保姆级教程》

手把手教会你做属于自己的网站《保姆级教程》 前言开始教程特别说明下期内容预报 前言 什么是个人网站? 个人网站是指因特网上一块固定的面向全世界发布消息的地方,通常由域名(也就是网站地址)、程序和网站空间构成,并…

TCP协议的状态码详解

TCP状态码是用来表示TCP连接过程中不同阶段的一种标识。以下是一些常见的TCP状态: 1. CLOSED:初始状态,表示TCP连接是关闭的或未打开的。 2. LISTEN:表示服务器端的某个套接字(SOCKET)处于监听状态&#…

Linux 软件包工具rpmbuild

下载工具rpm-build yum search rpm-build yum install rpm-build.x86_64制作属于自己的RPM包 1.准备打包目录 ls rpmbuild/ BUILD BUILDROOT RPMS SOURCES SPECS SRPMS 2.放入软件包 cp /root/nginx-1.18.0.tar.gz rpmbuild/SOURCES/ 3.编辑spec文件 vim rpmbuild/SPECS/n…

数字信号处理(MATLAB入门例子)

(代码主要来源于这本书) 1.用MATLAB产生32个正弦波样本,A2,f1000Hz,以及fs8000Hz % % Example 2.1 Sinewave generator % This example generate 32 sine sample, % plot it and save in sine.dat file% For the boo…

Vue js闭包

JavaScript闭包详解 在JavaScript中,闭包是一个非常重要的概念,也是JavaScript区别于其他语言的一大特色。理解闭包不仅有助于提升我们的编程技能,还能让我们更好地利用JavaScript的特性和优势。本文将详细解析闭包的概念、原理、应用以及相…

【AI相关】《这就是ChatGPT》读书笔记

《这就是ChatGPT》 斯蒂芬沃尔弗拉姆 这本书用了两天就一口气读完了,通篇读完后,这本书主要是介绍了ChatGPT怎么能做到生成内容的一些背后的原理逻辑,总结一下这本书是ChatGPT通过大量的数据(这些数据来自网络、书籍等等类似于数据…

低代码技术的全面应用:加速创新、降低成本

引言 在当今数字化转型的时代,企业和组织面临着不断增长的应用程序需求,以支持其业务运营和创新。然而,传统的软件开发方法通常需要大量的时间、资源和专业技能,限制了企业快速响应市场变化和业务需求的能力。在这样的背景下&…

混合现实(MR)技术的应用场景

混合现实(MR)技术将虚拟世界和现实世界融合在一起,用户可以在现实世界中看到和与虚拟物体进行交互,同时还可以感知周围的真实环境。MR技术具有广阔的应用前景,可以应用于各行各业。以下是一些MR的应用场景。北京木奇移…

【MySQL面试题】经典面试题之“b+树”

mysql为什么采用b树作为索引? 为什么要使用b树,首先我们要知道什么样的索引才是好的索引,高效的索引,我们都知道,mysql的数据是存储在磁盘的,而磁盘的io操作十分缓慢,我们通过索引去进行一次查…

Rust基本数据类型-切片

一、切片是什么,怎么用 1、切片是什么 切片并不是 Rust 独有的概念,在 Go 语言中就非常流行,它允许你引用集合中部分连续的元素序列,而不是引用整个集合。 对于字符串而言,切片就是对 String 类型中某一部分的引用&…

愉快的高效:通过电子学习培训客户

让顾客和合作伙伴忠诚于您的最有效方法之一是教导他们正确使用您的产品或服务。我们不是指书面说明书-它们枯燥复杂,没有人愿意阅读。基于现代数字技术的电子学习,或培训课程,可以帮助您吸引和留住顾客。 根据Brandon Hall进行的调查&#x…

【智能算法】金豺优化算法(GJO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年,N Chopra等人受到金豺狩猎行为启发,提出了金豺优化算法(Golden Jackal Optimization, GJO)。 2.算法原理 2.1算法思想 GJO 模拟金豺协同狩猎…

打印菱形(*之间有空格作为间距)

int main() { int i ;// 控制当前行数&#xff0c;用于菱形的上半部分和下半部分的迭代 int j ;// 控制每行前面空格的打印次数 int k ;// 控制每行星号&#xff08;*&#xff09;的打印次数 // 菱形的上半部分 for (i 1; i < 4; i) { // 打印…

【C语言进阶】动态内存管理

&#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL.. &#x1f4da;以后会将数据结构收录为一个系列&#xff0c;敬请期待 ● 本期内容会给大家讲解如何开辟动态内存空间&#xff0c;以及c/c内存是如何分配的&#xff0c;最后还会…

浏览器打不开DevTools?

随笔记录下某网站禁止通过F12, CtrlShiftI等快捷键来打开开发者工具&#xff0c;其次通过浏览器宽高定时来重定向。 目标网站 aHR0cHM6Ly93d3cuemhpaHUuY29tL21hcmtldC9wYWlkX2NvbHVtbi8xNjkxOTY2MTg4MzY2ODYwMjg4L3NlY3Rpb24vMTc1MjcyNjI3MjMzMjIxMDE3Nw问题描述 当我们通过…

MySQL事务--隔离级别

1 事务的隔离级别 事务的隔离级别是数据库管理系统&#xff08;DBMS&#xff09;提供的一种机制&#xff0c;用于控制并发事务之间的相互影响程度。隔离级别决定了一个事务对于其他事务所做的修改是否可见&#xff0c;以及在多个事务并发执行时可能出现的各种问题的程度。 常…