2021-09-12

2.Mysql日志系统

MySQL日志分类(针对InnoDB)

物理日志(引擎层) redo log
逻辑日志(server层) binlog

redo log

当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做

WAL

redo log和磁盘的配合就是WAL技术
WAL的全称是Write-Ahead Logging,它的关键点就是先写日志,再写磁盘(在空闲的时候)

InnoDB的redo log是固定大小的,比如可以配置为一组4个文件,从头开始写,写到末尾就又回到开头循环写
2021-09-12

1. checkpoint

当前要擦除的位置

2. write pos

当前记录的位置

crash-safe

有了redo log,InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe

binlog

与redo log不同点

1. 拥有对象

redo log是InnoDB引擎特有的;
binlog是MySQL的Server层实现的,所有引擎都可以使用。

2. 记录内容

redo log是物理日志,记录的是“在某个数据页上做了什么修改”;
binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1 ”。

3. 空间大小

redo log是循环写的,空间固定会用完;
binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

参考笔记

MySQL日志分类

上一篇:MySQL事务日志


下一篇:Java学习教程!mysql无法启动服务器