目录
0 引言
针对mysql日志系统的一些总结,主要是Innodb的redo日志和undo日志,然后就是server层的binlog日志,复习资料主要来自极客时间《Mysql实战45讲》和《MySQL是怎样运行的》
1 redo日志
redo日志是什么
redo日志记录了我们对于数据的改动操作。我们在对数据库进行操作的时,都是对buffer pool中的页面进行操作,当系统崩溃时这些页面也就会丢失从而使得数据库的数据出现丢失。所以我们需要将对数据库的改动操作记录到磁盘中,直接将buffer pool中的页面刷新到磁盘中是十分浪费时间和空间的,我们可以将对每次对数据库的改动记录成一条redo日志,这样只刷新较小的redo日志到磁盘中就更加节约资源。
Innodb引擎特有的
redo日志的写入过程
首先说明一点,就是我们的redo日志是按组写入的,也就是所谓的MTR,MTR表示对底层页面的一次原子访问,一次原子访问可能产生多条redo日志,这些redo日志就称为一个组。
我们的redo日志也是先写到缓存中,再写到磁盘上的。在内存中有一个redo log buffer的区用来存储我们的redo日志,这部分区域分为了一个个block,每个block占用了512字节。这些block占用的是一块连续的空间,我们向里面写redo日志就是按照组从第一个block开始顺序写入的
向磁盘中写redo日志的时机