关于binlog:Mysql-Log-介绍

47次阅读

共计 1213 个字符,预计需要花费 4 分钟才能阅读完成。

Mysql Log 介绍

[TOC]

参考:

redo log 和 undo log 区别

一文理解 InnoDB 存储引擎

前言

波及到的知识面有 Buffer Pool & Redo Log & Undo Log & BinLog & CheckPoint & 脏页。

如果每次数据更改操作都间接操作到磁盘上的话,当操作数量多起来的话,那么这些操作将变的很慢。为了进步操作之间的并发度,Mysql 设计了缓存零碎。

一、Buffer Pool

缓存池。当数据实现更改后,不会立马同步到磁盘上,而是先放到缓存池中。

二、Redo Log & Undo Log

2.1 Redo Log

为了避免零碎掉电后,缓存池中的数据不失落,即 保障事务的持久性,特此记录一份数据批改之后的 Log。例如,事务将 a 从 1 -> 2,b 从 4 -> 3,那么 Log 会记录 a:2, b:3。

2.1.1 特点

  1. 大小固定,能够通过命令设置innodb_log_write_ahead_size
  2. 写满之后,持续重头写,笼罩之前写的内容;

2.1.2 CHECKPOINT

CHECKPOINT 的作用就是记录上次刷入磁盘截止的地位,这样就不必每次都刷整个 redo log 了。

脏页:redo log 上与磁盘数据不同的局部叫脏页,即 CHECKPOINT 到本次文件光标地位所蕴含的数据。

2.1.3 用处

  1. 解决了数据变动立马操作磁盘的问题,进步了速度,之后便能够依照策略将 redo log 的日志批改数据;
  2. 当零碎掉电后,通过 redo log 进行数据恢复;

2.1.4 Redo Log 刷入磁盘

依照 redo log 上记录的数据变动,将磁盘数据更新。本文讲的所有 redo log 刷入磁盘都是指,刷入从 CHECKPOINT 开始到以后文件光标完结的数据。

刷入机会

  1. 定时刷入,每隔一段时间,将 redo log 刷入;
  2. lru(最近起码应用)算法刷入,当 Buffer Pool 闲暇空间有余时,采纳 LRU 算法淘汰缓存记录。因为缓存不见了,查问就会打到磁盘,为了保证数据一致性,得将 redo log 刷入磁盘;
  3. 日志不可用刷入,当将要笼罩的 log 还未被刷入磁盘时,将 redo log 刷入磁盘;

2.2 Undo Log

为了使事务在执行时能回滚到之前的状态,即 保障事务的原子性,特此记录一份数据批改之前的 Log。例如,事务将 a 从 1 -> 2,b 从 4 -> 3,那么 Log 会记录 a:1, b:4。

2.2.1 特点

  1. 当日志满时,新创建文件;
  2. 当文件总量过大时,删除老旧文件;

2.2.2 用处

  1. 用于事务回滚;
  2. 实现 MVCC(多版本并发管制);

2.3 记录步骤

假如有 A、B 两个数据,值别离为 1,2.

  1. 事务开始.
  2. 记录 A = 1 到 undo log.
  3. 批改 A =3.
  4. 记录 A = 3 到 redo log.
  5. 记录 B = 2 到 undo log.
  6. 批改 B =4.
  7. 记录 B = 4 到 redo log.
  8. 将 undo log 写入磁盘.
  9. 将 redo log 写入磁盘.
  10. 事务提交.

三、Binlog

Binlog 是只记录 对数据试图产生变动的行为,即便你更新前后数据没变动,也会记录。

有两种记录形式:

  1. 只记录 sql 语句;
  2. 记录执行语句前后的数据行内容;
正文完
 0