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 logInnoDB特有的,且日志上的记录落盘后会被覆盖掉。
因此需要binlogredo log二者同时记录,才能保证当数据库发生宕机重启时,数据不会丢失。
posted @ 2019-11-24 18:21  南哥的天下  阅读(8879)  评论(0编辑  收藏  举报