Redolog和Undolog以及Binlog

文章目录

  • Undolog
  • Reaolog
  • Binlog

Undolog

UndoLog也就是我们常说的回滚日志文件 主要用于事务中执行失败,进行回滚,以及MVCC中对于数据历史版本的查看。由引擎层的InnoDB引擎实现,是逻辑日志,记录数据修改被修改前的值,比如"把id=‘B’ 修改为id = ‘B2’ ,那么undo日志就会用来存放id ='B’的记录”。

  当一条数据需要更新前,会先把修改前的记录存储在undolog中,如果这个修改出现异常,则会使用undo日志来实现回滚操作,保证事务的一致性。当事务提交之后,undo log并不能立马被删除,而是会被放到待清理链表中,待判断没有事物用到该版本的信息时才可以清理相应undolog。它保存了事务发生之前的数据的一个版本,用于回滚,同时可以提供多版本并发控制下的读(MVCC)也即非锁定读。


Reaolog

Redolog是重做日志文件是记录数据修改之后的值,用于持久化到磁盘中。

  Redolog包括两部分:

  1. 是内存中的日志缓冲(redo log buffer),该部分日志是易失性的;

  2. 是磁盘上的重做日志文件(redo log file),该部分日志是持久的。

  由引擎层的InnoDB引擎实现,是物理日志,记录的是物理数据页修改的信息,比如“某个数据页上内容发生了哪些改动”。当一条数据需要更新时,InnoDB会先将数据更新,然后记录redoLog 在内存中,然后找个时间将redoLog的操作执行到磁盘上的文件上。 不管是否提交成功我都记录,你要是回滚了,那我连回滚的修改也记录。它确保了事务的持久性。


Binlog

Binlog由Mysql的Server层实现,是逻辑日志,记录的是sql语句的原始逻辑,比如"把id=‘B’ 修改为id = ‘B2’。

  Binlog会写入指定大小的物理文件中,是追加写入的,当前文件写满则会创建新的文件写入。

  产生:事务提交的时候,一次性将事务中的sql语句,按照一定的格式记录到binlog中。

  用于复制和恢复在主从复制中,从库利用主库上的binlog进行重播(执行日志中记录的修改逻辑),实现主从同步。业务数据不一致或者错了,用binlog恢复。

你可能感兴趣的:(数据库,数据库,mysql)