简述
在更新过程中,为了保证binlog和redolog一致性的一种手段。因为在buffer pool还没刷新到磁盘时系统崩溃了,就可以基于redolog来恢复数据。
两个阶段同时完成的才将事务提交,保证binlog和redolog一致性。
过程
-
预提交阶段,调用write将redolog写到磁盘(事实上是写入到了磁盘缓冲区)
-
调用write()将binlog写入文件缓冲区,通过
fsync()强制刷入磁盘 -
commit阶段,fsync将redolog刷入磁盘,保证redolog和binlog的一致性
数据库如何判断binlog和redolog达成了一致?
prepare阶段中会在redolog中记录一个XID,这是全局唯一的
row格式的binlog中也会有一个XID
只要两个redolog和binlog中的XID一致,那么两个日志逻辑上就是一致的