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

相关推荐
钢铁男儿36 分钟前
PyQt5高级界而控件(容器:装载更多的控件QDockWidget)
数据库·python·qt
阿蒙Amon4 小时前
C# Linq to SQL:数据库编程的解决方案
数据库·c#·linq
互联网搬砖老肖7 小时前
运维打铁: MongoDB 数据库集群搭建与管理
运维·数据库·mongodb
典学长编程8 小时前
数据库Oracle从入门到精通!第四天(并发、锁、视图)
数据库·oracle
积跬步,慕至千里9 小时前
clickhouse数据库表和doris数据库表迁移starrocks数据库时建表注意事项总结
数据库·clickhouse
极限实验室9 小时前
搭建持久化的 INFINI Console 与 Easysearch 容器环境
数据库
白仑色10 小时前
Oracle PL/SQL 编程基础详解(从块结构到游标操作)
数据库·oracle·数据库开发·存储过程·plsql编程
程序猿小D11 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
钢铁男儿12 小时前
C# 接口(什么是接口)
java·数据库·c#
__风__13 小时前
PostgreSQL kv(jsonb)存储
数据库·postgresql