标准答案
- undo log 记录修改前的信息,用于事务回滚和 MVCC 查找历史可见版本。
- redo log 或 WAL 采用先写日志再写数据页的思路,故障后可重放已提交变更,避免脏页未落盘导致数据丢失。
- binlog 或逻辑日志描述更高层的变更事件,常用于主从复制、变更订阅和时间点恢复。
- 不同数据库的日志名称、格式和刷盘策略不同,回答时应区分原理与特定产品实现。
- 日志链路需要和备份、复制延迟、磁盘容量及恢复演练一起管理,不能只关注正常写入速度。
题目解析
日志存在的原因是数据页写入慢且可能被打断。先保证顺序日志达到足够持久的介质,再异步刷新脏页,数据库就能在宕机后判断哪些操作应重做、哪些未提交操作应撤销。
复制和恢复并非自动可靠。逻辑日志缺失、格式不兼容、归档过期或副本落后,都会让“有日志”失去价值,因此需要监控和真实恢复测试。
常见误区
- 把所有日志都称为“备份”,忽略回滚日志、物理恢复日志和逻辑复制日志的职责不同。
- 为了性能随意降低持久化策略,却没有评估断电或节点故障时可接受的数据损失。