学完了三个日志的大概作用,后面就来了解了解两段式提交了,下面我们将从mysql执行过程来分析两段式提交的过程和作用
两阶段提交
先来看看执行图解
上面图解我们能清楚的看到两阶段提交的过程,这里就有疑问了 为啥redo log要写两次ne 不能只写一次嘛
我们先来回顾下两种日志使用领域 (redo是崩溃恢复,bin是主从复制)先写redo 或者先写 bin 这样就不可避免的会出现只记录了一种日志了
1 只有binlog 有存,那么如果崩溃了从redo恢复 但是从库从binlog读 就会导致从库比主库多数据
2 只有redolog 有存,那么如果崩溃了 从redo恢复 但是从库是从binlog读 会导致主库比从库多数据
所以就有了两段式提交了,那么两段式提交是怎么解决这个问题的呢
主要是两段式添加了一个xid 事务id 在写入两个日志的时候都会写入对应的事务id,只要redolog 中不是处于commit阶段,就去binlog去根据事务id去找 有的话就补一个commit 没有的话就执行回滚 ,这样就可以保证数据统一了