1. 数据库日志系统的三大支柱
在数据库管理系统中,日志机制是确保数据安全与一致性的核心组件。作为MySQL的核心日志模块,redolog、undolog和binlog各自承担着不可替代的关键角色。这三种日志协同工作,共同构成了数据库事务处理和灾难恢复的基础设施。
redolog(重做日志)是InnoDB存储引擎特有的物理日志,记录的是"在某个数据页上做了什么修改"。它的核心价值在于实现崩溃恢复(crash-safe)能力,确保已提交事务的持久性。当数据库异常重启时,通过重放redolog可以将数据库恢复到崩溃前的状态。
undolog(回滚日志)则是实现事务原子性的关键机制。它记录事务发生前的数据状态,当需要回滚事务时,可以根据undolog将数据恢复到事务开始前的样子。undolog是MVCC(多版本并发控制)实现的基础,使得读操作不会被写操作阻塞。
binlog(二进制日志)是MySQL Server层维护的逻辑日志,记录的是原始SQL语句或者行变更的逻辑信息。它主要有两个作用:主从复制和数据恢复。通过binlog可以实现跨时间点的数据恢复(point-in-time recovery),这也是为什么DBA常说"没有开启binlog的MySQL是不完整的"。
关键区别:redolog是InnoDB引擎层的物理日志,记录"怎么做";binlog是Server层的逻辑日志,记录"做了什么";undolog是事务层的逆向操作日志,记录"如何撤销"。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. redolog的写入机制与崩溃恢复
2.1 redolog的环形缓冲区设计
redolog采用固定大小的循环写入方式,由两部分组成:内存中的redo log buffer和磁盘上的redo log file。这种设计带来了极高的写入性能:
- 事务执行过程中,修改会先写入redo log buffer
- 通过innodb_flush_log_at_trx_commit参数控制刷盘策略:
- 1(默认):每次事务提交都刷盘,最安全但性能较低
- 0:每秒刷盘一次,性能最好但可能丢失1秒数据
- 2:写入OS缓存,每秒刷盘,折中方案
sql复制-- 查看当前redolog配置
SHOW VARIABLES LIKE 'innodb_log%';
`
