MySQL的Redo Log、Undo Log、Binlog与Replay Log日志

news2024/10/6 10:29:48

前言

        MySQL数据库作为业界最流行的开源关系型数据库之一,其底层实现涉及多种重要的日志机制,其中包括Redo Log、Undo Log、Binlog和Replay Log。这些日志组件共同确保MySQL数据库系统在面对事务处理、数据恢复和主从复制等方面表现出色。本文主要介绍一下它们的作用分别是什么?

1. Redo Log

1.1 概念

        Redo Log是MySQL保障事务持久性的关键组成部分,它记录了所有对数据库进行的修改操作,以便在系统崩溃或发生故障时能够恢复数据到事务提交的状态。

1.2 工作原理

        Redo log的工作原理主要有以下几个:
记录事务修改操作:

        当一个事务开始时,它对数据库进行修改的操作(例如插入、更新、删除)将会生成对应的Redo Log记录。这些记录包括了修改的数据页、修改前后的数据值等信息。

事务的提交操作:
       事务提交时,Redo Log记录被写入Redo Log缓冲区。Redo Log缓冲区是内存中的一块区域,用于暂时存储事务的Redo Log记录。

文件的循环写入:

        Redo Log文件是一个循环写入的文件,通常包括两个文件,如ib_logfile0ib_logfile1。当一个Redo Log文件写满时,新的记录将开始写入另一个文件,循环使用。

崩溃恢复操作:

        当MySQL实例因为崩溃或其他故障而重新启动时,数据库引擎会检查Redo Log,尤其是最后一个写入的文件。未提交的事务将被回滚,已提交的事务将会被重新执行,通过这个过程来保障数据库的一致性。

1.3 刷盘机制

        Redo Log的刷盘机制主要通过innodb_flush_log_at_trx_commit参数来控制。

1. innodb_flush_log_at_trx_commit=0:

  • Redo Log每秒钟被刷新一次。
  • 数据库性能最佳,但一旦MySQL崩溃,可能会丢失一秒钟的事务。

2. innodb_flush_log_at_trx_commit=1:

  • 每次事务提交时都会将Redo Log刷盘到磁盘。
  • 数据持久性最高,但性能开销也相对较高。

3. innodb_flush_log_at_trx_commit=2:

  • 每次事务提交时将Redo Log写入操作系统的缓存,而不直接刷盘。
  • 操作系统会定期将数据刷盘到磁盘。
  • 在这种情况下,可能会在MySQL实例崩溃时丢失一定量的数据,但相比于值为0的情况,性能有所提高。

2. Undo Log

2.1 概念

Undo Log用于记录事务的逆操作,即撤销操作。主要用于回滚事务和支持多版本并发控制(MVCC)。

2.2 工作原理

记录事务逆操作

  • 当一个事务开始时,MySQL会为该事务分配一个唯一的事务ID。
  • 对于事务的每个修改操作,Undo Log都会记录相应的逆操作,用于回滚。

事务的开始和结束

  • 在事务开始时,MySQL会为该事务分配一个事务开始记录(Transaction Start Record),并将其写入Undo Log。
  • 在事务结束时,MySQL会生成事务结束记录(Transaction End Record)。​​​​​​​

逆操作的记录

  • 对于每个事务修改操作(如插入、更新、删除),Undo Log会记录相应的逆操作,以确保在事务回滚时能够还原数据到修改前的状态。
  • 逆操作包括了旧数据的备份或者对原数据的恢复操作

多版本并发控制(MVCC)

  • Undo Log是MVCC的基础之一,支持并发事务的执行。
  • 当一个事务对数据进行修改时,MySQL不直接在原数据上进行修改,而是在Undo Log中记录修改前的数据。
  • 这使得其他事务可以同时读取原数据,实现了多版本并发控制。

回滚操作

  • 当事务需要回滚时,MySQL会使用Undo Log中的逆操作来撤销事务的修改操作,将数据还原到事务开始时的状态。
  • 这确保了事务的原子性和一致性。

3. Binlog(二进制日志)

3.1 基础概念

        Binlog是MySQL实现主从复制和数据恢复的关键组件。它记录了对数据库的所有修改操作。

        Binlog是一个二进制文件,包含一系列二进制日志事件。这些事件包括对数据的修改、表结构的变更等。

3.2 主从复制

MySQL进行主从复制,从服务器是将主服务器的binlog日志读取并写入到从服务器的replaylog上。

3.3 数据恢复

        通过使用Binlog,可以将数据库还原到特定时间点,应对数据丢失等情况。

3.4 优化Binlog性能

        透过调整sync_binlogbinlog_cache_size等参数,可以提高Binlog的性能。

4. Replay Log(重放日志)

4.1 基础概念

Replay Log是用于重放Binlog的关键组件,它在数据恢复和故障恢复过程中发挥作用。

Replay Log记录了执行过的Binlog事件,以确保在系统发生故障后能够重放这些事件,实现数据的一致性。

4.2 主从复制

       在binlog上已经提过了,Replaylog的作用是用于承接主服务器从binlog读取过来的数据,然后在从服务器上进行重放。

总结

        Redo Log、Undo Log、Binlog和Replay Log是MySQL数据库系统的核心技术,它们协同工作以确保数据库的持久性、一致性和高可用性。通过深入了解这些技术的原理和灵活配置,开发人员和DBA可以更好地利用

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

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

相关文章

08 OpenCV 腐蚀和膨胀

文章目录 作用算子代码 作用 膨胀与腐蚀是数学形态学在图像处理中最基础的操作。其卷积操作非常简单,对于图像的每个像素,取其一定的邻域,计算最大值/最小值作为新图像对应像素位置的像素值。其中,取最大值就是膨胀,取最小值就是腐…

就业班 2401--3.4 Linux Day10--软件管理

一、软件管理 导语: 安装软件 rpm yum 源码安装 ​ 卸载软件 rpm介绍 rpm软件包名称: 软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律 #有依赖关系,不能自动解决依赖关系。 举例:openssh-6.6.1p1-31.el7.x86_64.rpm 数字前面的是名…

SpringBoot多数据源配置(MySql、Oracle)

一、依赖 <!-- dynamic-datasource 多数据源--><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId></dependency><!--oracle驱动--><dependency><groupI…

机器视觉——硬件选型

1、相机选型 在选择机器视觉相机时&#xff0c;通常需要考虑以下几个方面&#xff1a; 1、分辨率&#xff1a;相机的分辨率决定了其拍摄图像的清晰度和细节程度。根据具体的应用需求&#xff0c;可以选择适当的分辨率范围。 2、帧率&#xff1a;帧率表示相机每秒钟能够拍摄的…

linux无法启动dhcp服务--Failed to start DHCPv4 Server Daemon.错误

linux dhcp服务搭建详细过程请看 linux系统dhcp服务部署 关于dhcp服务无法启动Failed to start DHCPv4 Server Daemon.错误 解决方法&#xff1a;虚拟网络编辑器中的也就是dhcp所要服务的子网ip地址要与dhcp.conf中的服务网段ip一致&#xff08;与上面subnet 192.168.1.0一致…

伊理威科技:抖音上开店铺需要什么条件

在数字浪潮的推动下&#xff0c;抖音已成为连接品牌与消费者的新桥梁。若想在此平台开设小店&#xff0c;需满足一系列条件&#xff0c;方可乘风破浪。首要条件是拥有一张有效的身份证明或企业营业执照&#xff0c;这是验证商家身份和合法经营的基础。接着&#xff0c;商品质量…

[C语言]——C语言常见概念(2)

目录 一.第⼀个C语言程序 二.main函数 三.print和库函数 1.print 2.库函数 四.关键字介绍 一.第⼀个C语言程序 #include <stdio.h> int main() {printf("hello C\n");return 0;//约定返回0&#xff0c;在c语言中&#xff0c;正常返回0&#xff0c;异常…

值得一看的博客

值得一看的blog GitHub - mqyqingfeng/Blog: 冴羽写博客的地方&#xff0c;预计写四个系列&#xff1a;JavaScript深入系列、JavaScript专题系列、ES6系列、React系列。 LogRocket Blog - Resources to Help Product Teams Ship Amazing Digital Experiences React Blog – Re…

【两万字面试系列】三年前的面试题。Service里面的线程安全问题

前言 三年前&#xff0c;大概是21年&#xff0c;那会刚学完java&#xff0c;然后去面试&#xff0c;被打的一塌糊涂&#xff0c;今天来盘一盘之前的面试&#xff0c;到底是怎样的问题整住了。然后发现了去年整的线程安全东西&#xff0c;也贴到文章后面了。那个贴的还不太准&a…

D-ID Studio:数字身份认证的新纪元

随着科技的飞速发展&#xff0c;数字身份认证已逐渐成为我们日常生活中不可或缺的一部分。在这个背景下&#xff0c;D-ID Studio以其前沿的技术和创新的解决方案&#xff0c;正引领着数字身份认证的新纪元。 D-ID Studio是一个功能强大的在线平台&#xff0c;专注于提供全面的…

字节如何用A/B测试,解决增长问题的?

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程&#xff0c;一周学完让你面试通过率提高90%&#xff01;&#xff08;自动化测试&#xff09; 摘要&#xff1a;上线六年&#xff0c;字节跳动的短视频产品——抖音已成为许多人记录美好生活的平台。除了抖音&…

ZABBIX修改web界面的 “支持“,“帮助”,“Integrations“。等菜单按钮,百试百灵,删除修改Help,Support菜单

♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ **ZABBIX修改web界面的 “支持”&#xff0c;“帮助”,“Integrations”。等菜单按钮&#xff0c…

SpringBoot3-Web开发

1. Web场景 1. 自动配置 1、整合web场景 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 2、引入了 autoconfigure功能&#xff08;自动配置功能&#xff09…

数学建模【多元线性回归模型】

一、多元线性回归模型简介 回归分析是数据分析中最基础也是最重要的分析工具&#xff0c;绝大多数的数据分析问题&#xff0c;都可以使用回归的思想来解决。回归分析的任务就是&#xff0c;通过研究自变量X和因变量Y的相关关系&#xff0c;尝试去解释Y的形成机制&#xff0c;进…

OPC网关助力OPC UA/OPC DA协议数据采集

随着工业自动化程度的不断提高&#xff0c;OPC协议在数据采集、监控和控制系统中扮演着越来越重要的角色。其中&#xff0c;OPC UA和OPC DA是两种广泛应用的协议标准。而HiWoo Box作为一款功能强大的OPC网关解决方案&#xff0c;正是这些协议数据采集的得力助手。 一、OPC协议…

Guitar Pro 8.1中文版永久许可证激活2024最新24位注册激活码生成器

Guitar Pro是一款非常受欢迎的音乐制作软件&#xff0c;它可以帮助用户创建和编辑各种音乐曲谱。从其诞生以来就送专门为了编写吉他谱而研发迭代的。 尽管这款产品可能已经成为全球最受欢迎的吉他打谱软件&#xff0c;在编写吉他六线谱和乐队总谱中始终处于行业领先地位&#…

基于STM32F4的FFT(快速傅里叶变换)求信号幅值,频率,相位差

基于STM32F4的FFT&#xff08;快速傅里叶变换&#xff09;求信号幅值&#xff0c;频率&#xff0c;相位差 一。FFT原理介绍 快速傅里叶变换&#xff08;Fast Fourier Transform&#xff0c;FFT&#xff09;是一种用于高效计算傅里叶变换的算法。傅里叶变换是一种信号处理技术…

第三百八十一回

文章目录 1. 概念介绍2. 修改方法 015buttonStyle.png2.1 修改形状2.2 修改颜色2.3 修改位置 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何创建以图片为背景的页面"相关的内容&#xff0c;本章回中将介绍如何修改按钮的形状.闲话休提&#xff0c;让我们一起T…

相机,棱镜和光场

一、成像方法 Imaging Synthesis Capture 1.Synthesis&#xff08;图形学上&#xff09;合成&#xff1a;比如之前学过的光线追踪或者光栅化 2.Capture&#xff08;捕捉&#xff09;&#xff1a;把真实世界存在的东西捕捉成为照片 二、相机 1.小孔成像 利用小孔成像的相…

做测试还是测试开发,选职业要慎重!

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程&#xff0c;一周学完让你面试通过率提高90%&#xff01;&#xff08;自动化测试&#xff09; 突然发现好像挺多人想投测开和测试的&#xff0c;很多人面试的时候也会被问到这几个职位的区别&#xff0c;然后有测…