1.redo log
如果熟悉MySQL你肯定知道MySQL能过对数据进行恢复(前提是开启bin log日志),当然这要归功于bin
log日志。但是你可曾听过redo log呢?
首先redo log是innodb引擎特有的,需要注意的是innodb是MySQL的一个插件。
什么是redo log呢?有啥用?实际上当我们执行一条修改语句,难道每次都要落盘吗?显然是不可能的,如果每次都需要落盘,首先数据量大的时候每次都要去对这么大的文件进行io操作,显然在效率上是不可行的。
那么redo log是怎么操作的呢?redo log首先是一个环形的文件,可以设置每个文件大小,同时是循环写入的,当对数据进行修改后会先写入到redo log,如果开启了binlog那么会再写入到bin log,最后根据实际情况来写入磁盘。这样就算MySQL异常重启了也能够保证数据不丢失,这种功能称之为crash-safe能力。
究竟什么时候写入到磁盘?
写入磁盘的实际是由MySQL决定的,例如现在不忙了。或者现在redo log要写满了。此时MySQL会主动进行触发写入到磁盘。
如下所示,write pos是当前写入的位置,而check point则是redo log落盘后对redo log进行清理后的位置。可以看出write pos和che