温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

数据库WAL和redo日志区别

发布时间:2026-10-18 04:17:04 来源:亿速云 阅读:93 作者:小樊 栏目:数据库

在数据库领域,WAL(Write-Ahead Logging) 和 Redo 日志 经常被一起提到,但它们并不是完全对等的概念,层次和含义不同。下面从定义、关系、区别几个角度说明。


一、基本定义

1. WAL(Write-Ahead Logging,预写日志)

WAL 是一种设计思想 / 机制:

在修改数据页之前,必须先把修改操作记录到日志中,并且日志要先行落盘(或至少优先于数据页落盘)。

核心原则:

  • 先写日志,再改数据
  • 保证崩溃后可以通过日志恢复

WAL 不规定日志的具体内容格式,只规定“顺序”。


2. Redo 日志(重做日志)

Redo 日志是日志的一种具体类型:

记录“对数据的物理或逻辑修改”,用于崩溃恢复时重做已提交但未落盘的操作。

例如:

  • 把页 (表空间, 页号) 偏移 100 处的 4 字节改为 0x1234
  • 或逻辑形式:给某行某字段加 10

二、核心关系

可以这样理解:

WAL 是“规则”
Redo 日志是“遵守该规则写出的内容之一”

示意:

WAL 机制
 ├── Redo Log(最常见)
 ├── Undo Log(某些实现也走 WAL)
 └── 其他日志(如逻辑日志、Binlog 在某些场景下)

三、主要区别

对比维度 WAL Redo 日志
本质 机制 / 协议 日志内容类型
关注点 写顺序与持久性 记录“做了什么修改”
是否一定存在 是(现代数据库基本都有) 是(在 WAL 实现中通常都有)
是否包含 Undo 否(WAL 本身不包含) 否(Redo 只重做)
典型用途 保证 ACID 中的 D 崩溃恢复

四、举例说明(以 MySQL InnoDB 为例)

  • WAL:InnoDB 规定,脏页刷盘前,对应的 redo 必须已写入并 fsync
  • Redo Log:ib_logfile0/1 中记录页修改
  • Undo Log:也通过 WAL 机制写,但用于回滚,不是 redo

五、常见误解澄清

❌ “WAL 就是 redo 日志”
✅ WAL 是机制,redo 是其中一种日志

❌ “没有 redo 就不是 WAL”
✅ 理论上 WAL 也可用于其他日志类型

❌ “Binlog 是 redo”
✅ Binlog 是逻辑日志,通常不属于 redo(MySQL 中 redo 在引擎层)


六、一句话总结

WAL 决定“怎么写”,Redo 日志决定“写什么”。

如果你愿意,我也可以从 PostgreSQL / MySQL / Oracle 的具体实现对比来讲,会更直观。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手