redo log:重做日志——是引擎层InnoDB特有的日志,是物理日志,记录在某一页上的数据做了什么修改。在数据更新时,先写内存,将修改记录到redo log中,在系统空闲时刻根据redo log对磁盘进行更新,保证更新效率。
WAL(Write-Ahead Logging)技术:先写日志,再写磁盘。
write pos:当前写的位置
checkpoint:当前要擦除的位置
保证之前提交的记录都不会丢失(crash-safe)。
binlog:归档日志——是MySql Server层(包含连接器、分析器、优化器以及执行器)日志,由执行器生成,是逻辑日志,记录语句的原始逻辑,采用追加的方式,一个日志写完了会换下一个,不会覆盖以前的binlog。
一个更新语句的执行流程图:
update T set c = c+1 where ID = 2;
redo log 的两阶段提交(prepare和commit)是为了保证两份日志之间的逻辑一致。