redo log是一种偏向物理性质的重做日志,因为它里面记录的是类似这样的东西,“对哪个数据页中的什么记录,做了什么修改”。而且redo log本身是属于InnoDB存储引擎特有的一个东西。
binlog叫做归档日志,他里面记录的是偏向逻辑性的日志,类似于“对users表中的id=10的一行数据做了更新操作,更新后的值是什么”
binlog不是InnoDB存储引擎特有的日志文件,是属于mysql server自己的日志文件。
1. 提交事务的时候,同时会写入binlog
当我们提交事务的时候,会把redo log日志写入磁盘文件中去,然后其实在提交事务的时候,我们同时还会把这次更新对应的binlog日志写入到磁盘文件中去,如下图所示:
2. binlog日志的刷盘策略
对于binlog日志,其实也有不同的刷盘策略,有一个sync_binlog参数可以控制binlog的刷盘策略,它的默认值是0,此时你把binlog写入磁盘的时候,其实不是直接进入磁盘文件,而是进入os cache内存缓存。
所以如果此时机器宕机,那么在os cache里的binlog日志是会丢失的,如下图:
如果把sync_