mysql日志含有server层的binlog日志(逻辑归档日志),在innodb存储引擎下的redo log日志(物理日志,记录修改信息)
binlog日志
在进行数据更新操作的时候,会在server层对每一笔更新操作进行记录
redo log日志
innodb存储引擎会把更新的数据先记录到redo log里面,等到合适的时机刷到磁盘,也就是WAL(Write-Ahead Logging),它的关键点就是先写日志,再写磁盘.
redo log是固定的大小,比如是1G,分四个文件,就是可以存储4G,而文件的结构有点像循环链表。如下图
write pos 是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件开头。checkpoint 是当前要擦除的位置。而write pos 与checkpoint 就是可以写的空白,当write pos 追上checkpoint时需要暂停刷一些数据到磁盘。之后继续写。
其中记录日志的步骤
比如你更新下面的sql
uupdate person set age=12 where id=1;
- 先去查询数据,先看内存是否有,如果没有则磁盘获取,并刷入内存
- 把age设置为12,并更新到内存
- 记录到redo log中,状态为prepare
4.写入binlog里面
5.进行事务提交,进入commit状态
网友评论