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站:

相关推荐
快来卷java2 小时前
MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略
数据库·mysql·oracle
IT认证通关4 小时前
金仓数据库KCM认证考试介绍【2025年4月更新】
数据库
程序猿阿伟4 小时前
《SQL赋能人工智能:解锁特征工程的隐秘力量》
数据库·人工智能·sql
冰箱里的金鱼5 小时前
MYSQL 存储引擎 和 日志
数据库
Yan-英杰5 小时前
【百日精通JAVA | SQL篇 | 第三篇】 MYSQL增删改查
java·数据库·sql
信徒_5 小时前
Mysql 中的 binlog、redolog、undolog
数据库·mysql
极限实验室6 小时前
代理 Elasticsearch 服务:INFINI Gateway VS Nginx
数据库·搜索引擎
三月七(爱看动漫的程序员)6 小时前
LLM面试题六
数据库·人工智能·gpt·语言模型·自然语言处理·llama·milvus
追光天使7 小时前
Mac 上使用 mysql -u root -p 命令,出现“zsh: command not found: mysql“?
数据库·mysql·macos
高铭杰7 小时前
Citus源码(2)分布式读流程分析与基础概念梳理(shardid、placementid、groupid)
数据库·分布式·postgresql·citus