WAL的机制在redo log的使用场景充分展现。
具体说来当执行一条sql时,过程如下:
- Innodb引擎会把数据先插入redo log(也是写入磁盘顺序写入,比较快)当中并更新内存(db buffer),这个时候更新就算完成了
- 此时,内存(db buffer)中的数据和磁盘数据(data file)对应的数据不同我们认为内存中的数据是脏数据(即:脏页)
- 这种顺序可以保证在需要故障恢复时恢复最后的修改操作
- 先持久化日志的策略叫做Write Ahead Log,即预写日志
- checkpoint 是当前要擦除的位置,也是往后推移并且循环的擦除记录湔要把记录更新到数据文件
- 有了 redo log,InnoDB 就可以保证即使不是数据库的基本安全机制发生异常重启之前提交的记录都不会丢失,这个能力称为crash-safe