博客
关于我
MySQL InnoDB 三大文件日志,看完秒懂
阅读量:798 次
发布时间:2023-02-10

本文共 1515 字,大约阅读时间需要 5 分钟。

Undo Log 在 MySQL InnoDB 存储引擎中的作用与原理

Undo Log 是 MySQL InnoDB 存储引擎中一个关键的日志机制,主要用于实现事务的原子性和多版本并发控制(MVCC)。它通过记录事务操作的不完全日志(Unundo Log Segment)为事务恢复提供支持。

Undo Log 的基本特性

Undo Log 在事务提交前就开始记录变化。当事务提交时,InnoDB不会立即删除 Undo Log 中的记录,而是将其添加到一个待删除列表中。这些记录会通过后台线程(purge thread)在适当的时候进行回收。例如,执行 DELETE 操作时,Undo Log 会记录一个对应的 INSERT 操作;执行 UPDATE 操作时,Undo Log 会记录一个相反的 UPDATE 操作。

Undo Log 的主要作用

1. 实现事务的原子性

Undo Log 的主要作用是确保事务的原子性。如果在事务执行过程中出现错误,或者用户执行 ROLLBACK 语句,InnoDB 可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。这保证了事务的原子性,即所有操作要么全部成功,要么全部被回滚。

2. 实现多版本并发控制(MVCC)

Undo Log 在 InnoDB 中用于实现 MVCC。事务未提交之前,Undo Log 中保存了未提交之前的版本数据。这使得其他并发事务可以利用 Undo Log 中的数据作为旧版本快照(snapshot),从而支持快照读(read committed)操作。

例如,在以下场景中,Undo Log 发挥着重要作用:

  • 事务 A 提交了一个更新操作,Undo Log 记录了该更新操作。
  • 事务 B 在事务 A 提交前执行了查询操作,利用 Undo Log 中的日志数据获取了事务 A 更新前的旧版本数据。

通过这种方式,Undo Log 不仅支持事务的原子性,还为并发事务中的快照读操作提供了可靠的数据来源。

Redo Log 与 Binlog

Redo Log 和 Binlog 是 MySQL 中重要的日志机制,分别负责事务恢复和数据复制。

Redo Log

Redo Log 的主要作用是记录事务提交时的数据变化,以便在数据库出现故障时能够恢复到最新的状态。具体来说,Redo Log 会在事务执行过程中跟踪脏页(dirty page)的写入操作。这些操作会被记录到 Redo Log 中,并在事务提交后写入到磁盘文件中。

Redo Log 的记录过程与事务提交有关:事务执行期间,脏页的写入会被记录到 Redo Log 中,而不是立即写入磁盘。等到所有脏页都写入磁盘后,Redo Log 中的记录可以被重用(被覆盖写入)。

Redo Log 的工作原理

  • 初始化:在数据库启动时,Redo Log 会被初始化为一个空的循环缓冲区。
  • 写入:在事务执行期间,脏页的写入会被记录到 Redo Log 中。
  • 提交:事务提交前,Redo Log 中的记录会被写入到磁盘文件中。
  • 重用:写入磁盘后,Redo Log 中的记录可以被重用,以提高日志写入的效率。
  • 通过 Redo Log,InnoDB 可以在数据库故障时,快速恢复到最新的状态,从而保证数据库的高可用性。

    总结

    Undo Log 和 Redo Log 是 InnoDB 中日志系统的两大核心机制,它们分别负责事务恢复和数据复制。在事务处理过程中,Undo Log 记录了所有未提交的操作,为事务的原子性和回滚提供了可靠的支持;而 Redo Log 记录了数据变化,确保了数据库在故障恢复时的可用性。

    转载地址:http://weffk.baihongyu.com/

    你可能感兴趣的文章
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>
    MySQL8,体验不一样的安装方式!
    查看>>
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>