MySQL中 undolog和redolog区别

server/2025/2/22 3:08:57/

MySQL,**Undo Log(撤销日志)和Redo Log(重做日志)**是两种非常重要的日志机制,它们用于保证事务的原子性、一致性、隔离性和持久性(ACID特性),并在数据库恢复过程中发挥关键作用。以下是它们的主要区别:

  1. 功能和用途
    Undo Log(撤销日志)
    用途:用于撤销(回滚)事务的操作。当事务回滚时,Undo Log记录了事务执行前的状态,可以将数据恢复到事务开始之前的状态。
    作用:主要用于事务的回滚操作,确保事务的原子性。如果事务在执行过程中失败或被用户主动回滚,Undo Log可以帮助恢复到事务开始时的状态。
    Redo Log(重做日志)
    用途:用于重做(恢复)事务的操作。当数据库发生故障后重新启动时,Redo Log记录了事务执行后的状态,可以将数据恢复到事务提交时的状态。
    作用:主要用于数据库的恢复操作,确保事务的持久性。即使数据库崩溃,Redo Log可以帮助恢复已提交事务的数据,保证数据的完整性。
  2. 记录的内容
    Undo Log
    记录事务执行前的数据状态(即“旧值”)。例如,事务将某列的值从A改为B,Undo Log会记录A作为旧值。
    Redo Log
    记录事务执行后的数据状态(即“新值”)。例如,事务将某列的值从A改为B,Redo Log会记录B作为新值。
  3. 写入时机
    Undo Log
    在事务执行过程中,每一步操作都会生成Undo Log,记录操作的“旧值”。
    Redo Log
    在事务执行过程中,每一步操作也会生成Redo Log,记录操作的“新值”。但Redo Log的写入时机可能与Undo Log不同。例如,在某些数据库系统中,Redo Log会在事务提交时写入磁盘,而Undo Log可能在事务执行过程中就写入磁盘。
  4. 存储位置
    Undo Log
    通常存储在数据库的系统表空间或专门的Undo表空间中。它需要持久化存储,因为可能需要在事务回滚时使用。
    Redo Log
    通常存储在专门的Redo Log文件中,这些文件是循环使用的。Redo Log文件通常较小,但写入频率较高,因为它们需要记录所有事务的变更。
  5. 使用场景
    Undo Log
    主要用于事务的回滚操作。例如:
    用户执行ROLLBACK命令。
    事务执行过程中发生错误或异常。
    数据库需要回滚到某个时间点的状态。
    Redo Log
    主要用于数据库的恢复操作。例如:
    数据库崩溃后重新启动。
    系统故障后恢复数据到事务提交时的状态。
  6. 对性能的影响
    Undo Log
    Undo Log的写入通常不会对性能产生显著影响,因为它们通常在事务执行过程中逐步写入。
    Redo Log
    Redo Log的写入对性能影响较大,因为它们需要频繁写入磁盘。为了减少磁盘I/O,数据库系统通常会采用日志缓冲区(Log Buffer)来缓存Redo Log,并在合适的时机批量写入磁盘。
  7. 示例
    假设有一个事务,将表users中某行的age列从20改为30:
    Undo Log会记录:age = 20(旧值)。
    Redo Log会记录:age = 30(新值)。
    如果事务提交成功,Redo Log会在数据库恢复时将age恢复为30。如果事务需要回滚,Undo Log会将age恢复为20。
    总结
    Undo Log主要用于事务的回滚,记录“旧值”。
    Redo Log主要用于数据库的恢复,记录“新值”。
    它们共同保证了事务的ACID特性,是数据库系统中不可或缺的部分

http://www.ppmy.cn/server/169728.html

相关文章

unity学习50:NavMeshAgent 区域Areas和cost

目录 1 NavMeshAgent 区域和成本的问题 2 区域Areas 2.1 区域和颜色 2.2 区域和成本 2.3 区域成本的作用 2.4 地图测试准备 2.5 如何实现 2.5.1 unity的2022之前的老版本 2.5.2 unity的2022之后的新版本 2.6 如果测试失败,是因为没有bake 2.7 测试前&…

Redis- 对象专辑

Redis-常见数据类型和应用 前言什么是对象Redis ObjectString对象常用操作写操作读操作删除操作 底层实现源码解释embstr和raw 比较 什么是SDS 使用场景常规计数分布式锁 List对象元素限制常用操作创建更新删除 编码方式ZIPLISTLINKEDLISTQUICKLISTLISTPACK编码 压缩列表什么是…

python-leetcode-编辑距离

72. 编辑距离 - 力扣(LeetCode) class Solution:def minDistance(self, word1: str, word2: str) -> int:m, n len(word1), len(word2)dp [[0] * (n 1) for _ in range(m 1)]# 初始化for i in range(m 1):dp[i][0] i # 只能删除for j in range…

Linux系统中常见的词GNU是什么意思?

GNU 是 “GNU’s Not Unix” 的递归缩写,它是一个自由软件项目,旨在创建一个完全自由的操作系统。这个名字反映了GNU项目的核心理念:它试图创建一个类Unix的系统,但不是Unix本身。 GNU 项目由 理查德斯托曼(Richard S…

【数据挖掘】ARFF格式与数据收集

【数据挖掘】ARFF格式与数据收集 三级目录1. ARFF格式与数据收集2. 稀疏数据3. 属性类型4. 缺失值与不正确的值5. 了解数据6. 知识表达7. 聚类机器学习算法训练数据挖掘分析数据共享与交换 三级目录 1. ARFF格式与数据收集 ARFF(Attribute - Relation File Format…

用Chrome Recorder轻松完成自动化测试脚本录制

前言 入门自动化测试,录制回放通常是小白测试首先用到的功能。而录制回放工具也一直是各大Web自动化测试必然会着重提供的一块功能。 早期WinRunner、QTP这样的工具,自动化测试可以说是围绕录制回放开展的。近年像Selenium也提供有录制工具 Selenium IDE,Playwright也包含…

java常见面试场景题

1. 如何定位线上OOM 造成OOM的原因 如何快速定位OOM 2. 如何防止重复下单 方案一:前端提交订单按钮置灰 用户点击下单按钮后置灰,防止用户无意点击多次 方案二: 后端Redis setnx 用户token 商品URL KEY 用setnx 命令并设置过期时间3-5秒防止重复下单…

CSS定位全解析:position属性详解与应用场景

在网页布局中,CSS定位是实现元素精准控制的关键技术之一。通过position属性,我们可以将元素放置在页面的任何位置,并控制其相对于其他元素的行为。本文将深入解析position属性的各个取值及其应用场景,帮助你掌握CSS定位的精髓。 …