概述:
- mysql及InnoDB中有多种日志。
binlog
- 归档日志
- 这是属于Server层的日志,和存储引擎无关,任何存储引擎都会有这个日志
- mysql主备库同步就是靠这个日志
- 逻辑日志
- 三种模式
- statement模式
- 默认
- 记录sql语句
- 同步备库时,备库执行相同sql逻辑,相比于下面的row模式,不用精确到每行,数据量小了很多,但是有可能出现主备不一致的情况。
- row模式
- 记录行的内容,记两条,更新前和更新后都有。
- 同步备库时,可以精确的同步每行内容,安全性高,但是数量量大
- Mixed
- 混合上面两种
- statement模式
redo log
- 重做日志
- 专属于InnoDB的日志。
- 每次增删改操作都是先写这个日志,再更新内存,最后适当时候在更新到真正的磁盘记录中。
- 这个日志保证了InnoDB即使发生异常重启,之前提交的记录都不会丢失。
- 物理日志,记录的是对数据最终存储形态——页的改动,
- 日志结构是个环形,大小固定,如果写满了就同步磁盘一次数据。
- 注意这个日志也是会持久化在磁盘上的,但是这个是顺序写的,非常快。

- write pos 是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件开头。
- checkpoint 是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件。
undo log
- 回滚日志
- 用于实现事务隔离的。
- 每条记录在更新的时候都会同时记录一条回滚操作。
- 用于实现事务的多版本并发控制。
- 这个日志的大小取决于系统中事务的多少以及存活长短
