MySQL InnoDB 三大文件日志,看完秒懂

本文详细介绍了MySQL InnoDB存储引擎的三种关键日志——Undo Log、Redo Log和Binlog。Undo Log用于事务回滚和MVCC,Redo Log确保事务持久性和崩溃恢复,Binlog支持主从复制和数据恢复。文章阐述了它们的作用、工作原理、写入机制及配置选项。
摘要由CSDN通过智能技术生成

Undo Log

意为撤销或取消,以撤销操作为目的,返回指定某个状态的操作。Undo Log 属于逻辑日志,记录一个变化过程。主要采用段的方式管理和记录。在 InnoDB 数据文件中包含一种 rollback segment 回滚段(内部包含了 1024 个 Undo Log Segment),可以通过参数 innodb_undo 命令控制 Undo Log。

show variables like '%innodb_undo%';
复制代码

Undo Log 在事务开始前产生;事务在提交时,并不会立刻删除 Undo Log,InnoDB 会将该事务对应的 Undo Log放入到删除列表中,后面会通过后台线程 purge thread 进行回收处理。例如:执行一个 delete,Undo Log 会记录一个 insert;执行一个 Update,Undo Log 会记录一个相反的 Update 操作。

Undo Log 的作用

  • 实现事务的原子性

Undo Log 是为了实现事务的原子性而出现的产物。事务处理过程中,如果出现了错误或者用户执行了 ROLLBACK 语句,MySQL 可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。

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

Undo Log 在 MySQL InnoDB 存储引擎中用来实现多版本并发控制。事务未提交之前,Undo Log 保存了未提交之前的版本数据,Undo Log 中的数据可作为数据旧版本快照供其他并发事务进行快照读的操作。

我们看个案例,如下:

MySQL InnoDB 三大文件日志,看完秒懂

图中可以看到,事务 A 手动开启事务,执行了更新操作,首先会把更新命中的数据备份到 Undo Buffer 中。事务 B 手动开启事务,执行了查询操作,此时会读取 Undo Buffer 中的日志数据并返回(进行了快照读操作)。

Redo Log 和 Binlog

Redo Log 和 Binlog 是 MySQL 日志系统中非常重要的两种机制。

Redo Log

顾名思义,就是重做,主要用于在数据库发送意外时进行数据的恢复。

Redo Log 会随着事务操作的执行而生成。在事务提交的时候会将产生的 Redo Log 写入到 Log Buffer 中,并不是随着事务的提交就立刻写入到磁盘文件。等事务操作的脏页写入到磁盘之后,Redo Log 的使命也就完成了,此时Redo Log 占用的空间就可以重用(被覆盖写入)。

Redo Log 的工作原理图<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值