redo log是innodb的,不是MySQL的。 有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe。
redo log 是物理日志,记录的是“在某个数据页上做了什么修改”
重要特性
日志切割
有重要的模块,write pos 和 checkpoint
InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么这块“粉板”总共就可以记录 4GB 的操作。从头开始写,写到末尾就又回到开头循环写,如上面这个图所示。
write pos 和 checkpoint 之间的是“粉板”上还空着的部分,可以用来记录新的操作。如果 write pos 追上 checkpoint,表示“粉板”满了,这时候不能再执行新的更新,得停下来先擦掉一些记录,把 checkpoint 推进一下。
write pog
redo log写入机制
redo log 状态
存在 redo log buffer 中,物理上是在 MySQL 进程内存中,就是图中的红色部分; 写到磁盘 (write),但是没有持久化(fsync),物理上是在文件系统的 page cache 里面,也就是图中的黄色部分;持久化到磁盘,对应的是 hard disk,也就是图中的绿色部分。
这是我在极客时间的2月第10天学习 参考文章: MySQL是怎么保证数据不丢的? (geekbang.org)