Undo Log、Redo Log 和 Binlog 的区别
这三种日志是数据库系统中的重要组件,各自有不同的功能和用途:
Undo Log (回滚日志)
- 目的:实现事务的原子性,用于事务回滚和MVCC(多版本并发控制)
- 内容:记录数据修改前的状态(前镜像)
- 生命周期:事务结束后不需要立即删除(可能被MVCC使用)
- 存储位置:InnoDB引擎层实现,存储在系统表空间中
- 作用:
- 事务回滚时恢复数据
- 实现MVCC,提供一致性读
Redo Log (重做日志)
- 目的:实现事务的持久性,确保已提交事务的修改不会丢失
- 内容:记录数据页的物理修改(物理日志)
- 生命周期:循环写入,空间会被重复使用
- 存储位置:InnoDB引擎层实现,有固定大小的文件组
- 特点:
- 顺序IO,写入性能高
- 用于崩溃恢复(crash-safe)
- 采用WAL(Write-Ahead Logging)机制
Binlog (二进制日志)
- 目的:主从复制和数据恢复
- 内容:记录所有引起数据变更的SQL语句(逻辑日志)
- 生命周期:可以配置过期时间自动清理
- 存储位置:MySQL Server层实现,独立于存储引擎
- 特点:
- 用于主从复制
- 支持时间点恢复
- 有三种格式:STATEMENT(语句)、ROW(行)、MIXED(混合)
主要区别总结
| 特性 | Undo Log | Redo Log | Binlog |
|---|---|---|---|
| 层级 | 引擎层(InnoDB) | 引擎层(InnoDB) | Server层 |
| 类型 | 逻辑日志 | 物理日志 | 逻辑日志 |
| 内容 | 修改前的数据 | 修改后的物理页 | 修改数据的SQL或行变化 |
| 用途 | 回滚和MVCC | 崩溃恢复 | 复制和恢复 |
| 持久性 | 非必需 | 必需 | 可选 |
| 写入时机 | 事务执行过程中 | 事务提交前 | 事务提交后 |
在MySQL的InnoDB引擎中,这三种日志协同工作保证ACID特性:Redo Log保证持久性,Undo Log保证原子性,两者共同保证一致性,Binlog则主要用于复制和恢复。
1699

被折叠的 条评论
为什么被折叠?



