聊聊Mysql的两阶段提交

从图中可看出,事务的提交过程有两个阶段,就是将 redo log 的写入拆成了两个步骤:prepare 和 commit,中间再穿插写入bin log,具体如下:

  • prepare 阶段:将 事务的修改写入到 redo log,同时将 redo log 对应的事务状态设置为 prepare,然后将 redo log 持久化到磁盘;

  • commit 阶段:将修改写入到 bin log,然后将 bin log 持久化到磁盘,之后将 redo log 状态设置为 commit,(此时该状态并不需要持久化到磁盘,只需要 write 到文件系统的 page cache 中就够了,因为只要 bin log 写磁盘成功,就算 redo log 的状态还是 prepare 也没有关系,一样会被认为事务已经执行成功;)

bin log的事务提交是指mysql的事务提交,redo log的commit标记是指两阶段提交的提交。

相关推荐
Yyyyyy~几秒前
【java】运算符
java
云贝贝贝5 分钟前
Oracle 运维高频 6 坑:硬日期、AUTOEXTEND、闪回、锁、FRA、双引号
运维·数据库·oracle
九月要晚安6 分钟前
从数据库到湖库一体
数据库
博界IT精灵8 分钟前
C语言中的数据类型及其转换
c语言·开发语言
古法安卓9 分钟前
Android-切换白天黑夜内存不足问题排查
android·java·android studio
正在走向自律10 分钟前
FastGPT高并发登录故障根治方案:50人并发报错、PostgreSQL、MongoDB数据库深度优化手册
数据库·mongodb·postgresql
软件黑马王子11 分钟前
13.缓存池优化:对象上限配置
开发语言·前端框架·c#
姜穆澜11 分钟前
时空数据处理全攻略
数据库
Dreams_l16 分钟前
如何保证RabbitMQ消息可靠传输
java·rabbitmq·java-rabbitmq
MacroZheng19 分钟前
面试官皱眉:"你懂 Vibe Coding,那你说superpowers和grill-me怎么选?",我:"小孩才做选择,我全都要!"
java·人工智能·后端