bin log(归档日志)
service层的归档日志,作为操作记录的凭证,用于数据备份,恢复数据等。
redo log(重做日志)
innoDB引擎提供的日志方式,提供了WAL功能(Write-Ahead logging),当表发生更新的时候,如果要去找该表该列在这个磁盘中的所在的位置,然后再去更新的话,这样由于磁盘的io、查找开销很大,而且很麻烦。所以采用了先写redo log,更新内存, innoDB会在的适当的时候再更新磁盘的数据。
innoDB的redo log是固定大小的,两个指针write pos就是当前要写的时候,check point表示要擦除的位置,他们之间的空隙表示是log可写的区域。当空隙很小的时候,需要将一些redo log的记录更新到磁盘中,后移check point。
redo log提供了innoDB一个重要的功能,就是crash-safe功能,当mysql 发生crash重启时,可以去读取redo log的记录,防止更新不会丢失。
redo log与bin log的区别
1、redo log是innoDB引擎的专属日志,而bin log是mysql sercice层的日志,所有引擎都可以使用
2、redo log是物理日志记录在某一个数据页的修改记录,而bin log是逻辑日志比如给某一行加1
3、redo log是循环写 有固定大小,而bin log是追加写 一个bin log写到一定程度会切换下一个文件
两阶段提交
以更新为例子
1、执行器调用引擎接口找到数据
2、执行器将数据修改,然后调用引擎的接口写入数据
3、引擎将数据更新到内存,更新redo log记录,redo log处于prepare
4、执行器生成bin log,并把bin log写到磁盘中
5、将redo log改为commit状态
undo log(回滚日志)
mysql更新数据,除了会生成redo log 和bin log以为还会生成一条回滚记录,记在undo log中,记录的最新值都可以通过回滚来找到上一个记录的值,同一条记录在数据库中会存在多个版本,当没有比该条回滚日志更早的read-view的时候,该条日志会被删除
