MySQL中Binlog Redolog Undolog区别?

MySQL中Binlog Redolog Undolog区别

在学习MySQL数据库管理和优化的过程中,理解和区分Binlog(二进制日志)、RedoLog(重做日志)和UndoLog(撤销日志)是至关重要的。这三种日志在MySQL中扮演着不同的角色,对于数据库的安全性、可靠性和性能都有着重要的影响。

让我们来思考一个问题:在数据库中,为什么需要记录日志呢?实际上,数据库中的日志记录是为了确保数据的一致性和持久性。当我们执行一条SQL语句来修改数据库中的数据时,数据库需要确保这个操作是可靠的,即使在数据库崩溃或断电的情况下也能够恢复数据到修改之前的状态。这就是日志的作用所在。

在MySQL中,有三种常见的日志类型:Binlog、RedoLog和UndoLog。它们分别负责记录不同类型的信息,以支持数据库的各种功能和特性。Biglog主要用于数据的复制和恢复,RedoLog用于事务的持久化和恢复,而UndoLog则用于事务的回滚和MVCC(多版本并发控制)。尽管它们都是日志,但它们的功能和作用却有着明显的区别。

RedoLog(重做日志)

RedoLog是MySQL中用于保证事务持久性的重要日志类型。它记录了数据库引擎对数据进行的修改操作,以确保即使在数据库崩溃或断电的情况下,也能够重新执行事务的修改操作,从而保证了事务的持久性和数据的一致性。

  1. 日志缓冲池

RedoLog的工作原理基于日志缓冲池的概念。在数据库引擎接收到事务提交请求时,会将事务对数据的修改操作先记录到日志缓冲池中,然后再异步地将这些日志写入到磁盘上的RedoLog文件中。日志缓冲池的存在可以提高事务提交的性能,因为事务提交时不需要等待所有的RedoLog都写入磁盘才能完成,而是先将日志记录到内存中,然后异步地刷新到磁盘。

  1. 日志文件组

RedoLog通常由一组RedoLog文件组成,这些文件的数量和大小可以通过配置参数来指定。当RedoLog文件组的空间用尽时,数据库引擎会自动切换到下一个空闲的RedoLog文件继续记录日志,以确保持续记录事务的修改操作。

  1. 日志记录格式

RedoLog中的每条日志记录包含了对数据进行修改的详细信息,包括修改的数据页、偏移量、修改前后的数据值等。日志记录的格式通常是二进制格式,以便于快速写入和读取。

工作流程

  1. 事务提交:当事务提交时,数据库引擎将事务对数据的修改操作记录到日志缓冲池中。
  2. 异步刷新:日志缓冲池中的日志记录会异步地刷新到磁盘上的RedoLog文件中,以确保事务的持久性。
  3. 崩溃恢复:如果数据库发生崩溃或断电,数据库引擎可以通过RedoLog中的日志记录重新执行事务的修改操作,将数据库恢复到崩溃之前的状态,保证数据的一致性。

如果数据库发生崩溃或断电,数据库引擎可以通过RedoLog中的日志记录重新执行事务的修改操作,将数据库恢复到崩溃之前的状态,保证数据的一致性。

UndoLog(撤销日志)

UndoLog是MySQL中的一种日志类型,用于支持事务的回滚操作和MVCC(多版本并发控制)。它记录了事务对数据的修改操作的逆向操作,即撤销操作。通过UndoLog,数据库可以在事务回滚或并发读取时,将数据恢复到事务开始之前的状态,以保证事务的原子性和一致性,同时支持数据库的并发读取操作。

  1. Undo段

UndoLog以Undo段(Undo Segment)为单位进行管理。每个Undo段对应着一个事务的修改操作,用于记录该事务对数据的撤销操作。Undo段可以是内存中的数据结构,也可以是磁盘上的文件,根据具体的实现方式不同而有所不同。

  1. Undo页

Undo段由多个Undo页(Undo Page)组成,每个Undo页可以理解为一个Undo日志的容器。Undo页的大小通常与数据库的页大小相同,以便于管理和存储。

  1. Undo记录

Undo页中包含了多个Undo记录(Undo Record),每个Undo记录对应着一个事务对数据的修改操作。Undo记录中记录了修改前的数据值、修改后的数据值以及撤销操作的详细信息。

工作流程

  1. 事务开始:当事务开始时,数据库引擎会为该事务分配一个新的Undo段,用于记录该事务对数据的修改操作。
  2. 数据修改:事务执行过程中对数据进行的修改操作会先记录到RedoLog中,然后再进行实际的数据修改。同时,数据库引擎将该修改操作的逆向操作记录到UndoLog中。
  3. 事务提交或回滚

如果事务提交,则数据库引擎将事务对数据的修改操作标记为已提交,并释放Undo段的空间。如果事务回滚,则数据库引擎通过UndoLog中的信息,将数据恢复到事务开始之前的状态,以撤销该事务对数据的修改操作。

  1. 并发控制:在并发读取时,数据库引擎可以根据UndoLog中的信息,提供数据的多个版本,以支持数据库的MVCC功能。这样可以避免读取到正在进行修改的数据,保证了读取操作的一致性和隔离性。

BinLog(大事务日志)

MySQL中的Binlog(二进制日志)是一种重要的日志类型,主要用于实现数据的复制、恢复和高可用性。它记录了MySQL服务器上所有的数据库变更操作,包括数据插入、更新、删除等操作,以二进制格式进行存储。

  1. 数据复制:Binlog是MySQL实现主从复制(Master-Slave Replication)的基础。通过将主服务器上的Binlog发送到从服务器,并在从服务器上执行相同的数据变更操作,实现了数据的异地复制和同步。
  2. 数据恢复:Binlog记录了数据库中所有的数据变更操作,包括事务的提交和回滚等操作。当数据库发生意外崩溃或数据丢失时,可以通过重放Binlog中的数据变更操作来恢复数据到崩溃之前的状态。
  3. 数据库备份:Binlog可以用于增量备份数据库。通过定期备份Binlog文件,可以实现对数据库的增量备份,从而减少全量备份的时间和空间开销,提高备份效率。
  4. 数据库恢复点:Binlog记录了数据库中每个事务的提交时间戳和位置信息,可以用于确定数据库的恢复点。在需要回滚到特定时间点或特定位置时,可以利用Binlog来确定回滚的位置和时间,从而实现数据库的精确恢复。
  5. 数据审计:Binlog记录了数据库中所有的数据变更操作,可以用于数据审计和监控。通过分析Binlog可以了解数据库中每个数据操作的时间、执行者和具体内容,从而实现对数据库操作的追踪和监控。

三者区别

  • 用途不同:
    • binlog 用于记录数据库的整体变更,支持数据库同步和恢复。
    • redo log 用于保证事务的持久性,记录事务级别的修改操作。
    • undo log 用于支持事务的回滚操作,记录事务级别的逆操作。
  • 记录的信息不同:
    • binlog 记录的是逻辑上的 SQL 语句或者行的变更。
    • redo log 记录的是物理上的数据页的修改。
    • undo log 记录的是事务的逆操作,用于回滚。
  • 存储位置不同:
    • binlog 存储在主数据库上。
    • redo logundo log 存储在磁盘上的特定文件中。
  • 生命周期不同:
    • binlog 可以根据配置保留一定时间,超过时间的可能被清理。
    • redo logundo log 持久存在,直到相应的事务结束。
+---------------------+------------------------+----------------------+----------------------+
|      特性           |        binlog          |      redo log        |      undo log        |
+---------------------+------------------------+----------------------+----------------------+
|      功能           | 记录数据库整体变更     | 保证事务持久性        | 用于事务回滚         |
+---------------------+------------------------+----------------------+----------------------+
|      格式           | 二进制格式,可读性差    | 二进制格式,可读性差  | 逆操作的信息         |
+---------------------+------------------------+----------------------+----------------------+
|      作用范围       | 记录整个数据库变更     | 记录事务级别修改     | 记录事务级别逆操作   |
+---------------------+------------------------+----------------------+----------------------+
|      存储位置       | 存储在主数据库上       | 存储在磁盘上的文件   | 存储在磁盘上的文件   |
+---------------------+------------------------+----------------------+----------------------+
|      生命周期       | 可以根据配置保留时间   | 持久存在直到事务结束 | 持久存在直到事务结束 |
+---------------------+------------------------+----------------------+----------------------+

志的配置和管理

在MySQL的配置文件中,有一些与日志相关的参数可以配置,其中包括了与RedoLog和UndoLog相关的参数。以下是一些常见的与日志相关的参数以及它们的作用:

  1. innodb_log_file_size

这个参数指定了每个InnoDB日志文件的大小,以字节为单位。较大的日志文件大小可以提高日志写入性能,但也会增加崩溃恢复的时间。默认值通常为48MB,可以根据实际需求调整。

  1. innodb_log_files_in_group

这个参数指定了InnoDB日志文件组中日志文件的数量。默认值通常为2,表示有两个日志文件。增加日志文件数量可以提高写入性能和容错能力。

  1. innodb_log_buffer_size

这个参数指定了InnoDB日志缓冲区的大小,以字节为单位。较大的缓冲区可以提高日志写入性能,但也会增加内存消耗。默认值通常为8MB,可以根据实际需求调整。

  1. max_binlog_size

这个参数指定了每个Binlog文件的最大大小,以字节为单位。较大的Binlog文件大小可以减少文件切换的频率,但也会增加崩溃恢复的时间。默认值通常为1GB,可以根据实际需求调整。

针对这些参数,可以根据数据库的实际需求进行合理配置和管理

  1. 大小调整

可以根据数据库的负载情况和性能需求,调整RedoLog和UndoLog的大小。较大的日志文件大小可以提高日志写入性能,但也会增加崩溃恢复的时间。

  1. 位置管理

可以将RedoLog和UndoLog文件放置在不同的物理设备上,以提高IO性能和容错能力。例如,可以将RedoLog放置在独立的磁盘上,以减少磁盘IO的竞争。

  1. 数量配置

可以根据数据库的负载情况和并发性能需求,调整RedoLog文件组中日志文件的数量。增加日志文件数量可以提高写入性能和容错能力。

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

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

相关文章

C++中结构体与结构体变量 和 类与对象的区别

具体区别如下: 结构体 -> 结构体变量 { 结构体:struct student{ 具体是多少,年龄,名字,性别,成绩 } 结构体变量: stu{ 名字:张三,年龄:18&#…

小迪安全23-php后台模块

cookie技术 cookie就是身份验证表示,通过cookie好区分每个用户的个人数据和权限,第一次登陆之后正常的网站都会赋予一个cookie 写写一个后台界面,直接让ai去写就可以 然后自己需要的提交方式,和表单值自己修改即可 生成cookie的…

(面试经典问题之连接池篇)连接池构成、作用及其基本原理详解

一、什么是连接池 连接池一般指的是数据库连接池(connection pooling),是指程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对池中的连接进行申请,使用,释放&#xf…

Java+SpringBoot+Vue+数据可视化的综合健身管理平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在当今社会,随着人们生活水平的不断提高和健康意识的日益增强,健…

echarts找不到了?echarts社区最新地址

前言:在之前使用echarts的时候,还可以通过上边的导航栏找到echarts社区,但是如今的echarts变更之后,就找不到echarts社区了。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 如今…

Jenkins 配置 Credentials 凭证

Jenkins 配置 Credentials 凭证 一、创建凭证 Dashboard -> Manage Jenkins -> Manage Credentials 在 Domain 列随便点击一个 (global) 二、添加 凭证 点击左侧 Add Credentials 四、填写凭证 Kind:凭证类型 Username with password: 配置 用…

【Nacos】从零开始启动Nacos服务(windows/linux)

文章目录 前言前置条件官方网址一、Nacos下载1.1 选择Nacos版本1.2 下载 二、解压2.1 解压到某个文件夹 三、 启动3.1 方式一:直接使用命令启动3.1.1 进入bin文件夹3.1.2 进入命令行工具3.1.3 执行命令 3.2 方式二:修改配置文件后启动3.2.1 修改启动脚本…

Microsoft 365 Copilot中使用人数最多的是哪些应用

今天在浏览Microsoft 365 admin center时发现,copilot会自动整理过去30天内所有用户使用copilot的概况: 直接把这个图丢给copilot让它去分析,结果如下: 总用户情况 总用户数在各应用中均为 561 人,说明此次统计的样本…

AI学习第一天-什么是AI

AI的发展可以被分为四次浪潮,这包括符号主义、机器学习与神经网络,以及深度学习。在这些发展中,深度学习凭借其在处理非结构化复杂数据、强大的学习能力和可解释性方面的优势备受关注。深度学习技术的应用不仅提升了AI系统的性能,…

计算机视觉:经典数据格式(VOC、YOLO、COCO)解析与转换(附代码)

第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章&#xff1…

解决本地模拟IP的DHCP冲突问题

解决 DHCP 冲突导致的多 IP 绑定失效问题 前言 续接上一篇在本机上模拟IP地址。 在实际操作中,如果本机原有 IP(如 192.168.2.7)是通过 DHCP 自动获取的,直接添加新 IP(如 10.0.11.11)可能会导致 DHCP 服…

安全生产月安全知识竞赛主持稿串词

女:尊敬的各位领导、各位来宾 男:各位参赛选手、观众朋友们 合:大家好~ 女:安全是天,有了这一份天,我们的员工就会多一份幸福, 我们的企业就会多一丝光彩。 男:安全是地,有了这一片地,我们的员工就多了一…

JDBC学习

背景:主机正在运行mysql服务 在cmd输入 mysql -u root -p 之后,输入密码(我的用户名是root,密码是root),成功登录到mysql。 输入:SHOW GLOBAL VARIABLES LIKE port; 检查mysql服务的端口号 …

前端js进阶,ES6语法,包详细

进阶ES6 作用域的概念加深对js理解 let、const申明的变量,在花括号中会生成块作用域,而var就不会生成块作用域 作用域链本质上就是底层的变量查找机制 作用域链查找的规则是:优先查找当前作用域先把的变量,再依次逐级找父级作用域直到全局…

IDEA通过Maven使用JBLJavaToWeb插件创建Web项目

第一步:IDEA下载JBLJavaToWeb插件 File--->Settings--->Plugins--->Marketplace搜索: JBLJavaToWeb 第二步:创建普通Maven工程 第三步: 将普通Maven项目转换为Web项目

在VSCode中接入deepseek

注册就送14元2000万tokens。 https://cloud.siliconflow.cn/i/rnbA6i6U各种大模型 下面介绍我是如如接入vscode的 左边生成一个key,呆会vscode要用,不然401. 打开vscod,电脑能上网。下插件。 下好要配置 点它一下。 要配置,全…

Mac端homebrew安装配置

拷打了一下午o3-mini-high,不如这位博主的超强帖子,10分钟结束战斗 跟随该文章即可,2025/2/19亲测可行 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客文章浏览阅读10w次,点赞258次,收藏837次。一直觉得自己写…

安全启动(secure boot)怎么关闭_史上最全的各品牌机和组装机关闭安全启动教程

很多网友发现电脑BIOS设置中都有一个secure boot(安全启动)选项,而且一些预装win10或win11改Win7的教程中也有提到要把安全启动关闭,那么我们该怎么关闭安全启动呢?下面教大家各品牌机和组装机关闭安全启动教程。 secure boot该关还是开&…

C进阶 自定义类型

目录 前言 一 结构体 二 结构体的存储 三 位段 四 枚举 五 联合体 总结 前言 我们之前学习的int char double ......都是内置类型,但是我们今天所学习的是自定义类型,比如联合体,结构体,枚举 一 结构体 结构体是一…

STM32的HAL库开发---ADC采集内部温度传感器

一、STM32内部温度传感器简介 二、温度计算方法 F1系列: 从数据手册中可以找到V25和Avg_Slope F4、F7、H7系列只是标准值不同,自行查阅手册 三、实验简要 1、功能描述 通过ADC1通道16采集芯片内部温度传感器的电压,将电压值换算成温度后&…