做网站代码的含义,河北地矿建设集团官方网站,在试用网站做推广,业务员用什么软件找客户两阶段提交的过程
当事务提交后#xff0c;有一个两阶段提交策略。
在开启两阶段提交时#xff0c;会开启一个 XA 事务#xff08;宏观上的事务#xff09;#xff0c;
Prepare 阶段#xff1a;将 redo log 的状态设置为 prepare#xff0c;然后将 事务XID 写入 redo…两阶段提交的过程
当事务提交后有一个两阶段提交策略。
在开启两阶段提交时会开启一个 XA 事务宏观上的事务
Prepare 阶段将 redo log 的状态设置为 prepare然后将 事务XID 写入 redo log然后提交 redo log
Commit 阶段将事务 XID 写入bin log然后对 bin log 刷盘最后将 redo log 的状态设置为 commit 当断电后进行崩溃恢复时会按照顺序扫描 redo log 文件 会首先查看 redo log 的状态如果 redo log 的状态为 commit则说明事务的两阶段提交已经完成可以放心进行数据恢复。 如果 redo log 状态为 prepare则检查 redo log 中的 XID 再根据 XID 去 bin log 中进行查找如果 bin log 中不存在 XID则说明 虽然 redo log 刷盘了但是 bin log 没有刷盘此时会进行事务回滚根据 undo log 回滚 如果 bin log 存在 XID则虽然 redo log 处于 prepare 状态但 bin log 已经刷盘了此时会对事务进行提交。同时也可以放心进行数据恢复。
为什么有两阶段提交
主要是为了保证主从数据库一致性。
若没有两阶段提交可能发生 redo log 已经刷入磁盘但 bin log 没有刷入磁盘或者 bin log 已经刷入磁盘而 redo log 没有刷入磁盘的情况。如果是前者若断电则崩溃恢复后主数据库的数据可以恢复而从数据库从 bin log 中获取到的数据是有缺失的从而导致主从不一致。如果是后者若断电则恢复后主数据库的数据会丢失而从数据库的数据可以恢复完整也会导致主从不一致现象。