MySQL日志文件

2022-07-03  本文已影响0人  坤坤坤坤杨

Undo Log日志

1. 介绍

Undo:意思就是撤销,以撤销操作为目的,返回指定某个状态的操作。
undo log: 数据库事务开始之前,会将修改的记录存放到undo日志里,当事务回滚时或者数据库崩溃时,可以利用undo日志,撤销未提交事务对数据库产生的影响。
undo log产生和销毁:undo log在事务开始前产生,在事务提交时,并不会立刻删除undo log ,innodb会将该事务对应的undo log放入到删除列表中,后面会通过后台线程进行回收处理,undo log 属于逻辑日志,记录一个变化过程,例如执行一个delete,undo log会记录一个insert;执行一个update会记录以恶搞相反的update。
undo log 存储:undo log 采用段的方式管理和记录,在innodb数据文件中包含一种包含rollback segment回滚段,内部包含1024个undo log segment。可以通过下面一组参数控制undo log存储。
show variables like %innodb_undo%

2. 作用

  1. 实现事物的原子性
    undo log 是为了实现事务的原子性而出现的产物。事务处理过程中,如果事务出现了错误或者用户执行了rollback语句,mysql可以利用undo log中的备份将数据恢复到事务开始之前的状态
  2. 实现多版本并发控制(MVCC)
    undo log在mysql innodb存储引导中用来实现多版本并发控制。事务未提交之前,undo log保存了未提交之前的版本数据,undo log中的数据可作为数据旧版本快照其他并发事务进行快照读。
    事务A手动开启事务,执行更新操作,首先会把更新命中的数据备份到undo buffer中
    事务B手动开启事务,执行查询操作,会读取undo日志数据返回,进行快照读

Redo Log日志

1. 介绍

Redo:意思就是重做,以恢复操作为目的,在数据库发生意外时重现操作。
Redo log:指事务中修改的任何数据,将最新的数据备份存储的位置,被称为重做日志(顺序记录,写满后回溯到第一个文件,进行覆盖写)。
Redo log的生成和释放:随着事务操作的执行,就会生成Redo log,在事务提交时会将产生的Redo log写入到log buffer,并不是随着事务提交就立刻写入到磁盘文件(避免随机io操作,如果直接持久化到磁盘可能会有不连续的数据,而写入到日志文件中可以顺序的写入,效率写入日志文件中低),等事务的脏页写入到磁盘后,Redo log的使命就完成了,Redo log占用的空间就可以重用(覆盖写入)。

2. 工作原理

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

3. 写入机制

底层有两个指针:

  1. write pos:当前记录的位置,一边写一边后移,写到最后一个文件末尾就回到0号文件开头。
  2. checkpoint:当前要擦出的位置,往后推并且循环,擦除记录钱啊把记录更新到数据文件中。

4. 相关配置参数

每个innodb存储引擎至少有一个重做文件组,每个组至少有2个重做日志文件,默认为ib_logfile-0和ib_logfile-1,可以通过下面一组参数控制redo log存储:
show variables like %innodb_log%
redo buffer持久化到redo log的策略,可以通过innodb_flush_log_at_trx_commit设置

上一篇 下一篇

猜你喜欢

热点阅读