当前位置: 首页 >> 财务 > 内容页
今日热闻!MySQL的SQL语句执行流程(简述)
来源:博客园     时间:2023-05-27 19:09:15

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 关闭