暂无图片
请问各位大佬:mysql数据库redo log和binlog的2pc的疑问
我来答
分享
小北
2024-11-24
请问各位大佬:mysql数据库redo log和binlog的2pc的疑问

请问各位大佬

mysql数据库redo log和binlog的2pc的疑问

如果发生prepare阶段redo log写了数据,而binlog没来得及写数据的情况。

就会整体redo log回退的情况。那么这种情况下是不是已经提交的事务也会发生回滚?

此外双1是和2pc之间关系是什么呢?

谢谢!

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
龙舌兰地落🌏

在崩溃恢复时,会顺序扫描redolog,已经提交的事务不会回滚;若处于prepare状态,拿xid去binlog中找对应的事务看完不完整,完整则提交,不完整回滚。
双一情况下,顶多丢失一个事务,即binlog不完整且redolog还在prepare阶段。否则丢失的事务量就不确定了。

暂无图片 评论
暂无图片 有用 3
打赏 0
暂无图片
伟鹏

如果发生prepare阶段redo log写入了数据,但binlog没来得急的话,innodb 重启之后。发现带有prepare标识的事务,会去检查binlog 来确认是否已经提交。如果binlog 已经写入,则证明已经提交,提交的事务就不需要回滚了。如果binlog没有的话,就会回滚。

另外你说的双1是double write的么? double write是为了保证数据库的完整性一致性,这个是对单个节点数据写入避免缺失,先吧数据写入到double write缓冲区,然后再写入数据页的模式。 2pc是保证分布式数据的一直性的。

暂无图片 评论
暂无图片 有用 0
打赏 0
龙舌兰地落🌏
2024-11-25
双一是innodb_flush_log_at_trx_commit=1和sync_binlog=1
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏