redolog、binlog、undolog 区别与作用
一、重做日志(redo log)
作用:
确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。
二、回滚日志(undo log)
作用:
保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定
三、二进制日志(binlog):
作用:
在实际应用中,binlog
的主要使用场景有两个:
- 主从复制:在
Master
端开启binlog
,然后将binlog
发送到各个Slave
端,Slave
端重放binlog
从而达到主从数据一致。 - 数据恢复:通过使用
mysqlbinlog
工具来恢复数据。
binlog和redolog区别:
- redolog是InnoBD专有的,记录的是物理数据页面的修改的信息。
- binlog是mysql数据库自带的,逻辑格式的日志,可以简单认为就是执行过的事务中的sql语句。
- redo log是保证事务的持久性的,是事务层面的,binlog作为还原的功能,是数据库层面的(当然也可以精确到事务层面的),虽然都有还原的意思,但是其保护数据的层次是不一样的。
- 恢复数据时候的效率,基于物理日志的redo log恢复数据的效率要高于语句逻辑日志的binlog
binlog
日志只用于归档,只依靠binlog
是没有crash-safe
能力的。但只有redo log
也不行,因为redo log
是InnoDB
特有的,且日志上的记录落盘后会被覆盖掉。因此需要
binlog
和redo log
二者同时记录,才能保证当数据库发生宕机重启时,数据不会丢失。