MySQL日志系统原理

MySQL日志系统原理

  • Undo Log
    • Undo Log 介绍
    • Undo Log 作用
    • Undo Log 原理
  • Redo Log
    • Redo Log 介绍
    • Redo Log 作用
    • Redo Log 原理
  • Binary Log(binLog)
    • Binary Log 介绍
    • Binary Log 作用

Undo Log

Undo Log 介绍

undo Log 是InnoDB 引擎特有的日志体系,他主要的作用是用来撤销操作,返回指定某个状态的操作

undo Log 在数据库事务开始之前,会将要修改的记录存放到Undo Log 里面,当食物回滚或者数据库崩溃的时候,可以利用Undo Log,撤销未提交事务对数据库的影响

Undo Log 作用

  • 实现事务的原子性
    Undo Log 是为了实现事务的原子性而产出的产物,在事务处理过程中,如果出现了错误或者用户执行了 rollback 语句,MySQL可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态
  • 实现多版本控制(MVCC)
    事务未提交前,Undo Log 中保存了未提交之前的版本数据,Undo Log 中的数据可作为数据旧版本快照供其他并发事务进行快照读

Undo Log 原理

MySQL日志系统原理_第1张图片

  1. 首先一个事务进行更新操作,会先将要修改的数据放到内存中
  2. 将拿到的原数据进行备份到 undo buffer 中,开始事务的执行
  3. 如果有其他事物来进行数据的获取,直接从 undo buffer 中获取数据
  4. 事务提交完毕之后,undo buffer 会将原数据持久化到 undo log 中
  5. 原数据持久化完毕之后,才会将内存中更改的数据持久化到磁盘
  6. 如果产生了回滚等操作,会将buffer 中的数据重新写回内存中进行持久化

当我们的隔离级别为 repeatable read 时,只要该事务不结束,undo log不会删除

Redo Log

Redo Log 介绍

redo log就是保存执行的SQL语句到一个指定的Log文件,当mysql执行数据恢复时,重新执行redo log记录的SQL操作即可

Redo Log 作用

Redo Log 是为了数据持久化而出现的产物,随着事务的执行而生成,在事务提交时会将产生的 Redo Log 写入到 log buffer 中,然后在逐步进行落盘,等事务操作结束之后,Redo Log 日志才会被重用

Redo Log 还是为了数据恢复做准备的
恢复策略:

  1. 进行恢复时,只重做已经提交了的事务
  2. 进行恢复时,重做所有事务,然后通过Undo Log回滚那些未提交的事务

Redo Log 原理

MySQL日志系统原理_第2张图片

Binary Log(binLog)

Binary Log 介绍

binlog 是记录了MySQL 中各种修改操作,这是所有的引擎 都具有的性质,undo log 和 redo log 知识InnoDB 的特性

Binary Log 作用

  • 主从复制
  • 数据恢复

BinLog 的记录方式:

  1. Row:日志会记录每一行数据被修改的记录,优点是记录每一行的修改细节,缺点是文件太大,如果涉及到增改字段,文件大小会暴增
  2. statment:每一条修改数据的SQL 会记录到master 的binLog 日志中,slave 只需要执行和 master 相同的sql 既可,有点是日志量小,缺点是修改可能不是很准确,如果sql 语句中携带可变的参数,会有风险
  3. mixed:两种混合,一般会使用 statment,只有 statment 无法复制的情况下才会使用 row

你可能感兴趣的:(数据库学习笔记)