Java面试八股之MySQL的redo log和undo log

  1. MySQL的redo log和undo log

在MySQL的InnoDB存储引擎中,redo log和undo log是两种重要的日志,它们各自服务于不同的目的,对数据库的事务处理和恢复机制至关重要。

Redo Log(重做日志)

功能

redo log的主要作用是确保事务的持久性(Durability),即使在系统崩溃的情况下也能恢复数据的一致性。

它记录了所有修改数据页的物理变化,这些变化在事务提交后会被记录到redo log中。

工作原理

当一个事务中的数据页发生变化时,InnoDB不仅会修改内存中的数据,还会在redo log中记录这个修改动作。

当事务提交时,相关联的redo log会被标记为已提交,这样即使在之后的系统崩溃中,通过重放redo log,InnoDB能够确保所有已提交的事务所做的更改都能被应用到磁盘上的数据页中。

重要性

redo log是恢复策略的一部分,它确保了即使在断电或系统崩溃后,数据库仍能恢复到一个一致的状态。

由于redo log的存在,InnoDB能够在重启后重做所有已提交的事务,从而保证数据的完整性和持久性。

Undo Log(撤销日志)

功能

undo log主要用于支持事务的回滚(Rollback)和实现多版本并发控制(MVCC)。

它记录了事务修改前的数据值,使得事务在回滚时能够恢复到修改前的状态。

工作原理

当一个事务开始时,任何对数据页的修改都会生成一条undo log记录,这条记录保存了修改前的数据值。

如果事务回滚,InnoDB会使用undo log中的信息将数据恢复到事务开始时的状态。

对于MVCC,undo log使得多个事务可以同时读取同一行的不同版本,而不会相互干扰。

重要性

undo log保证了事务的原子性和一致性,使数据库能够在事务失败或回滚时回到一个一致的状态。

它也是MVCC的关键组成部分,允许并发读取而不阻塞事务的写操作。

总结来说,redo log和undo log分别负责持久性和一致性两个方面,它们共同作用于InnoDB的事务处理和恢复机制,确保了数据库的ACID属性。redo log关注数据的持久性,而undo log则关注数据的可回滚性和多版本并发控制。

如果大家需要视频版本的讲解,欢迎关注我的B站:

相关推荐
三8448 小时前
redis防御加固与安全基线
数据库·redis·安全·应急响应·防御
lhldsg8 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
IT大白鼠8 小时前
MySQL 分布式集群系列 · 第四篇——实操部署指南:从零搭建生产级 MySQL NDB 集群
数据库·分布式·mysql
IT大白鼠9 小时前
MySQL 分布式集群系列 · 第三篇——核心原理精讲:NDB 自动分片、多主写入与数据同步
数据库·分布式·mysql
Elastic 中国社区官方博客9 小时前
教程:使用 ES|QL 进行威胁狩猎
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索·安全威胁分析
斑马13911 小时前
Linux软件编程学习笔记(十三)——数据库
数据库·oracle
初願致夕霞11 小时前
MySQL_索引
数据库·mysql
十六年开源服务商11 小时前
2026网站备份方案完整指南
数据库·oracle
一只小李郁vickie12 小时前
mysql 开启压缩传输3402条数据2.1秒压缩到毫秒级
数据库·mysql