惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy International News Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News and Events Feed by Topic
Hacker News: Ask HN
Hacker News: Ask HN
V2EX - 技术
V2EX - 技术
L
LINUX DO - 最新话题
Google Online Security Blog
Google Online Security Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Stack Overflow Blog
Stack Overflow Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
P
Proofpoint News Feed
A
Arctic Wolf
Forbes - Security
Forbes - Security
Spread Privacy
Spread Privacy
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
AWS News Blog
AWS News Blog
M
MIT News - Artificial intelligence
GbyAI
GbyAI
V
Visual Studio Blog
T
The Blog of Author Tim Ferriss
有赞技术团队
有赞技术团队
Help Net Security
Help Net Security
博客园 - Franky
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Schneier on Security
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
PCI Perspectives
PCI Perspectives
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Palo Alto Networks Blog
SecWiki News
SecWiki News
TaoSecurity Blog
TaoSecurity Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
Kaspersky official blog
G
Google Developers Blog
H
Hacker News: Front Page
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
T
Troy Hunt's Blog
F
Full Disclosure
T
Threat Research - Cisco Blogs

博客园 - 郭慕荣

彻底搞懂 Codex Skill 与插件:区别、试用、核心作用、项目落地全指南(程序员实战向) Codex Skill 和插件到底有什么区别?程序员如何在项目中落地使用 claudecode 配置防止配置文件泄露总结 Claude code分析外部文件总结 Claude code三种模式详解 hasCompletedOnboarding详解 Claudecode 有哪些常用的命令 claude.md文件详解 claude code 的setting文件详解 Docker部署zookeeper总结 Mac中git ssh的配置(GitLab) Java 类加载机制 面试题(一) 如何监控和调优JVM性能? jvm常用的参数有哪些? 怎么配置? hashmap 和currenthashmap 的原理?详解一下 aop在项目中使用的场景?怎么使用? Java dubbo spring springboot中的spi机制 spring中常见的两种代理模式 Redis的zset 面试汇总 drools 规则引擎在线化配置 springcloud中常用的注解详解 springcloud中网关gateway总结 spring是怎么解决循环依赖的? MySQL 死锁 怎么处理? 在写left join的时候 是大表在左侧 还是小表在左侧(二) 在写left join的时候 是大表在左侧 还是小表在左侧(一) nacos客户端(接口调用者)如何感知被调用服务下线? (二) nacos客户端(接口调用者)如何感知被调用服务下线?(一)
在MySQL中 redolog undolog binlog 写入的场景,顺序
郭慕荣 · 2025-10-18 · via 博客园 - 郭慕荣

🧩 一、三个日志的基本概念

日志类型作用层面主要功能存放位置
Redo Log InnoDB 引擎层 记录“数据页的物理修改” InnoDB 特有(ib_logfile)
Undo Log InnoDB 引擎层 用于事务回滚 & MVCC InnoDB 表空间中
Binlog Server 层 记录所有事务的逻辑操作,用于主从复制、恢复 全局(MySQL Server)

🧠 二、三种日志的用途和作用详解

1️⃣ Redo Log(重做日志)

目的:保证事务的持久性(D of ACID)

当事务执行 UPDATE/INSERT/DELETE 时,InnoDB 不会立即把数据页刷盘
而是:

  1. 把修改写入内存缓冲区(Buffer Pool)

  2. 同时记录一条 Redo Log(物理变化)

  3. Redo Log 先写入磁盘(WAL,Write-Ahead Logging)

👉 即使宕机,只要 Redo Log 存在,系统重启后也能根据日志“重放”修改。

特点:

  • 是物理日志(记录页号、偏移量、修改内容)

  • 循环写(固定大小的日志文件组)

  • 用于 崩溃恢复


2️⃣ Undo Log(回滚日志)

目的:保证事务的原子性(A of ACID)
当事务执行修改时,会先生成一份 “修改前的数据镜像”,即 Undo Log。

例如:

Undo Log 记录:

作用:

  • 事务回滚时恢复旧值

  • MVCC(多版本并发控制)读数据时使用历史版本(快照读)

特点:

  • 是逻辑日志(记录反向操作)

  • 存储在 InnoDB 表空间中(undo tablespace)

  • 事务提交后,Undo Log 会被标记为可回收


3️⃣ Binlog(二进制日志)

目的:保证数据的可复制性和可恢复性

MySQL Server 层维护,记录了所有事务的逻辑操作(如 SQL 或行变化)。

作用:

  • 主从复制:Slave 根据 Binlog 重放数据

  • Point-in-Time 恢复:利用 Binlog + 全量备份恢复任意时刻数据

特点:

  • 是逻辑日志(记录 SQL 或行级变化)

  • 顺序追加写

  • 与存储引擎无关(InnoDB、MyISAM 都会产生)


⚙️ 三、日志写入的顺序(重点)

当一个事务执行时,MySQL 涉及到 redo log、undo log、binlog 三者的交互。
以事务执行 UPDATE 为例:


💡 执行过程图


📜 实际写入顺序(事务提交阶段)

阶段操作说明
写入 Undo Log 为后续回滚做准备
写入 Redo Log(prepare状态) 保证事务可恢复
写入 Binlog 记录逻辑操作(主从复制)
Redo Log 改为 commit状态 标记事务提交成功

✅ 双写机制 + 两阶段提交(2PC)

因为 Redo Log 在引擎层、Binlog 在 Server 层,
为了保证 主从一致性,InnoDB 实现了“两阶段提交”:

🔹 阶段 1:prepare 阶段

  • 写 Redo Log(状态为 prepare)

  • 保证即使崩溃,也能恢复到 prepare 状态

🔹 阶段 2:commit 阶段

  • 写 Binlog 成功后,再将 Redo Log 标记为 commit

💡 为什么要这样?

  • 如果 Binlog 写成功但 Redo Log 未提交 → 数据丢失,主从不一致

  • 如果 Redo Log 提交但 Binlog 未写成功 → 主从不一致

所以“两阶段提交”保证了:

redo log 与 binlog 的一致性 = 数据的最终一致性。


🧾 四、三个日志的恢复逻辑总结

场景依赖日志恢复方式
系统宕机恢复 Redo Log 重做未刷盘的修改
事务回滚 Undo Log 回滚未提交的事务
主从复制 / 数据恢复 Binlog 重放逻辑操作

🔍 五、示例演示事务执行全过程

执行过程:

步骤操作日志
1 执行 UPDATE 生成 Undo Log(记录旧值)
2 修改 Buffer Pool 数据 产生 Redo Log(prepare)
3 写 Binlog 记录逻辑 SQL
4 Redo Log commit 标记提交完成
5 数据异步刷盘 后台刷到磁盘(checkpoint)

🧠 六、总结记忆口诀

Undo 保原样,Redo 保结果,Binlog 保过程。

日志层级主要作用写入顺序
Undo Log InnoDB 回滚/快照 第1写
Redo Log InnoDB 持久化恢复 第2写(prepare + commit)
Binlog Server 主从复制/恢复 第3写