概述:

  • mysql及InnoDB中有多种日志。

binlog

  • 归档日志
  • 这是属于Server层的日志,和存储引擎无关,任何存储引擎都会有这个日志
  • mysql主备库同步就是靠这个日志
  • 逻辑日志
  • 三种模式
    • statement模式
      • 默认
      • 记录sql语句
      • 同步备库时,备库执行相同sql逻辑,相比于下面的row模式,不用精确到每行,数据量小了很多,但是有可能出现主备不一致的情况。
    • row模式
      • 记录行的内容,记两条,更新前和更新后都有。
      • 同步备库时,可以精确的同步每行内容,安全性高,但是数量量大
    • Mixed
      • 混合上面两种

redo log

  • 重做日志
  • 专属于InnoDB的日志。
  • 每次增删改操作都是先写这个日志,再更新内存,最后适当时候在更新到真正的磁盘记录中。
  • 这个日志保证了InnoDB即使发生异常重启,之前提交的记录都不会丢失。
  • 物理日志,记录的是对数据最终存储形态——的改动,
  • 日志结构是个环形,大小固定,如果写满了就同步磁盘一次数据。
  • 注意这个日志也是会持久化在磁盘上的,但是这个是顺序写的,非常快。
  • 日志系统 - 图1
    • write pos 是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件开头。
    • checkpoint 是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件。

undo log

  • 回滚日志
  • 用于实现事务隔离的。
  • 每条记录在更新的时候都会同时记录一条回滚操作。
  • 用于实现事务的多版本并发控制
  • 这个日志的大小取决于系统中事务的多少以及存活长短