redo log是事务日志,Binlog是数据变更的逻辑日志,二者必须同时成功,保证记录一致,
二阶段提交指的就是:
第一阶段:在事务开始时,MySQL会把操作记录到redo log中,同时会在redo log中打上 prepare 的标志,表示在redo log中事务开始了
第二阶段:在事务完成以后,会先记录到BinLog中,然后再去redo log中标记上commit,这样就保证了redo log 和binLog的一致性
以上就是MySQL的二次提交,所以InnoDB在写入redo log并不是一次写完的,而是分成两个阶段 prepare 和 commit
在写入 redo log 时崩溃:两个日志中都没有数据,满足数据的一致性
在写入redo log的prepare时崩溃:由于没有打上commit 的标记,所以在Binlog中找不到对应的这个事务的id,那么就需要执行回滚操作
在写入Binlog之后崩溃:由于redo log中的事务id可以在Bin log 中可以找到(表示事务已经刷入磁盘),所以可以直接提交数据,为redo log中事务打上commit标记
广告
X 关闭
广告
X 关闭