mysql binlog日志与redo log

mysql日志含有server层的binlog日志(逻辑归档日志),在innodb存储引擎下的redo log日志(物理日志,记录修改信息)

binlog日志

在进行数据更新操作的时候,会在server层对每一笔更新操作进行记录

redo log日志

innodb存储引擎会把更新的数据先记录到redo log里面,等到合适的时机刷到磁盘,也就是WAL(Write-Ahead Logging),它的关键点就是先写日志,再写磁盘.
redo log是固定的大小,比如是1G,分四个文件,就是可以存储4G,而文件的结构有点像循环链表。如下图

image.png

write pos 是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件开头。checkpoint 是当前要擦除的位置。而write pos 与checkpoint 就是可以写的空白,当write pos 追上checkpoint时需要暂停刷一些数据到磁盘。之后继续写。

其中记录日志的步骤

比如你更新下面的sql

uupdate person set age=12 where id=1;
  1. 先去查询数据,先看内存是否有,如果没有则磁盘获取,并刷入内存
  2. 把age设置为12,并更新到内存
  3. 记录到redo log中,状态为prepare
    4.写入binlog里面
    5.进行事务提交,进入commit状态
image.png

你可能感兴趣的:(mysql binlog日志与redo log)