redo log和undo log是InnoDB引擎的,binlog是server层的
undo log和binlog是逻辑日志,redo log是物理日志
undo log用于记录事务开始前的状态,用于事务失败时的回滚操作;
redo log记录事务执行后的状态,用来恢复未写入data file的已成功事务更新的数据
-
redo log:重做日志,属于物理日志,用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来
更新语句执行时,InnoDB引擎会把更新记录写到redo log日志中,然后更新内存,此时算是语句执行完了,然后在空闲的时候或者是按照设定的更新策略将redo log中的内容更新到磁盘中,关键点是先写日志,再写磁盘
-
binlog:归档日志,属于逻辑日志,是以二进制的形式记录的是这个语句的原始逻辑
-
undo log:回滚日志,提供回滚操作,保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读
redo log和binlog区别
- redo log是属于innoDB层面,binlog属于MySQL Server层面的
- redo log是物理日志,记录该数据页更新的内容;binlog是逻辑日志,记录的是这个更新语句的原始逻辑
- redo log是循环写,日志空间大小固定;binlog是追加写,是指一份写到一定大小的时候会更换下一个文件,不会覆盖
- 应用场景不同:binlog可以作为恢复数据使用,主从复制搭建;redo log作为异常宕机或者介质故障后的数据恢复使用