binlog、redo log和undo log是在MySQL数据库中三种不同类型的日志
1、binlog(二进制日志)
binlog主要记录数据库所有的修改操作, 包括ddl和dml操作。
可以用来做数据备份、容灾恢复、主从复制。
注意, binlog是循环使用的,当达到一定大小时,旧的日志会被新的日志覆盖。
binlog的格式有三种, 可以用binlog_forma参数进行设置。
- statement: 记录的是每个修改数据的SQL语句的原文。
- row: 基于行, 记录的是每一行数据的变更。
- mixed:是statement和row的混合模式。大多数情况下使用statement格式记录,但在某些情况下会自动切换到row格式。
2、redo log(重做日志)
redo log是物理日志, 且是InnoDB存储引擎特有的, 主要记录当前事务操作, 包含操作命令、执行结果。
可以用来做数据持久化、容灾恢复。
由两部分组成
- redo log buffer(内存中)
- 和redo log file(磁盘上)。
事务提交时,redo log buffer中的内容会被刷新到磁盘中, 且这个过程采用二阶段提交。
3、undo log(回滚日志)
是InnoDB存储引擎特有的日志,主要记录事务修改前的数据快照。
用于处理事务的原子性和一致性。另外, 还支持mvcc在并发处理事务时提供一定的隔离性。
当事务需要回滚, 会用undo log撤销已经进行的修改。
由两部分组成
- undo log buffer(内存中)
- undo log files(磁盘上)
在事务回滚或数据库恢复时,undo log会被用来撤销事务的修改。