MySQL日志体系
- MySQL为了满足主从复制、事务等,有复杂的日志体系
- Server层产生binlog,用来进行数据复制
- InnoDB产生undo log、redo log,用来实现事务ACID
-
binlog
归档日志
server层产生的逻辑日志
- 用来进行数据复制和数据传送
- 完整记录了数据库的每次数据操作,可作为数据闪回手段
-
undo log 回滚日志
InnoDB自身产生的逻辑日志,用于事务回滚和展示旧版本
- 对任何数据(缓存)的更新,都先写undo log
- undo log位于表空间的undo segment中
SQL: UPDATE name = ‘b’ —> undo: UPDATE name = ‘a’
redo log重做日志
InnoDB自身产生的物理日志,记录数据叶(page)的变化
- InnoDB“日志优先于数据”,记录redo log视为数据已经更新
- 内存中的数据更新后写redo log,数据被写入硬盘后删除
- redo log存储在4个1GB文件中,并且循环写入

- write pos是当前日志写入点
- check point是擦除点,数据被更新到硬盘时擦除
- 当write pos追上check point时,事务无法提交,需要等待check point推进
- 只要redo log不丢,数据就不会丢失
