MySQL的Undo Log、Redo Log和Binlog
创始人
2024-02-13 21:28:33
0

Undo Log、Redo Log、Binlog三者的理解

Undo Log - 逻辑日志:

Undo Log 属于逻辑日志,记录一个变化过程。执行一个delete会记录一个相反的insert;它是在数据库事务开始之前,将要修改的记录存放到Undo Log里,当事务回滚或数据库崩溃时利用Undo Log日志,撤销未提交事务对数据库产生的影响。

Undo Log在事务开始前产生;事务在提交时,并不会立即删除Undo Log,InnoDB 会将该事务对应的Undo Log放到删除列表中,后面会通过后台线程purge thread进行回收处理

Undo Log作用

  1. 实现事务的原子性

Undo Log是为了实现事务的原子性而出现的产物。事务处理过程中,如果出现了错误或者用户执行了Rollback语句,mysql可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。

  1. 实现多版本并发控制(MVCC)

Undo Log在Mysql InnoDB 存储引擎中用来实现MVCC。事务未提交前,Undo Log保存了未提交之前的版本数据,Undo Log中的数据可作为数据旧版本快照供其他并发事务进行快照读。

Redo Log - 物理日志:

​ Redo Log是InnoDB 引擎所特有的日志,以恢复操作为目的,在数据库发生意外时重现操作。Redo Log文件内容是以顺序循环的方式写入文件,写满时则回溯到第一个文件,进行覆盖写。

​ Redo Log是为了实现事务的持久性而出现的产物。防止在发生故障的时间点,尚有脏页未写入表的idb文件中,在重启mysql服务的时候,根据Redo Log进行重做,从而达到事务的未入磁盘数据进行持久化这一特性。

Redo Log 有两个指针Write Pos和CheckPoint

  1. Writr Pos是当前记录的位置,一边写一边后移,写到最后一个文件末尾后就回到0号文件开头;
  2. CheckPoint是当前要擦除的位置,也是往后推移并且循环的,擦除数据前要把数据更新到数据文件;
  3. Write Pos和Check Point之间还空着的部分,可以用来记录新的操作。如果Write Pos追上CheckPoint时表示写满,这时就不能再执行新的更新,得停下来先擦掉一些记录,把CheckPoint推进一下。

Binlog (Binary log - 二进制日志)

Binlog 是记录所有数据库表结构变更和表数据修改的二进制日志,不会记录select和show这类操作。Binlog 是以事件形式记录,还包含了语句所执行的消耗时间。

开启Binlog有以下两个最重要的使用场景:

  • 主从复制:在主库开启Binlog功能,这样主库就可以把Binlog传递给从库,从库拿到binlog后实现数据恢复,达到主从数据一致;
  • 数据恢复:通过mysqlbinlog 工具来恢复数据。

Redo Log和Binlog的区别

  1. Redo Log是属于InnoDB 引擎功能,Binlog是属于Mysql Server自带的功能,并且是以二进制文件记录;
  2. Redo Log属于物理日志,记录该数据页更新状态内容;Binlog 是逻辑日志,记录更新过程;
  3. Redo Log日志是循环写,日志空间大小固定;Binlog 是追加写,不会覆盖使用。

相关内容

热门资讯

中证A500ETF摩根(560... 8月22日,截止午间收盘,中证A500ETF摩根(560530)涨1.19%,报1.106元,成交额...
A500ETF易方达(1593... 8月22日,截止午间收盘,A500ETF易方达(159361)涨1.28%,报1.104元,成交额1...
何小鹏斥资约2.5亿港元增持小... 每经记者|孙磊    每经编辑|裴健如 8月21日晚间,小鹏汽车发布公告称,公司联...
中证500ETF基金(1593... 8月22日,截止午间收盘,中证500ETF基金(159337)涨0.94%,报1.509元,成交额2...
中证A500ETF华安(159... 8月22日,截止午间收盘,中证A500ETF华安(159359)涨1.15%,报1.139元,成交额...
科创AIETF(588790)... 8月22日,截止午间收盘,科创AIETF(588790)涨4.83%,报0.760元,成交额6.98...
创业板50ETF嘉实(1593... 8月22日,截止午间收盘,创业板50ETF嘉实(159373)涨2.61%,报1.296元,成交额1...
港股异动丨航空股大幅走低 中国... 港股航空股大幅下跌,其中,中国国航跌近7%表现最弱,中国东方航空跌近5%,中国南方航空跌超3%,美兰...
电网设备ETF(159326)... 8月22日,截止午间收盘,电网设备ETF(159326)跌0.25%,报1.198元,成交额409....
红利ETF国企(530880)... 8月22日,截止午间收盘,红利ETF国企(530880)跌0.67%,报1.034元,成交额29.0...