增强半同步:after_sync

工作原理
  1. master将新的事务写入binlogbuffer),
  2. 然后发送给slave并开启一个ack线程用于接收slaveack应答,
  3. 然后master将自己的binlog syncdisk并等待slaveack应答,
  4. 只有接收了ack应答才会commit。对于客户端来说,
  5. 他们看到的数据是一样的,因为他们看到的数据都是在接收slaveack应答后才提交数据。
  6. 这种情况下,如果master突然故障,不会丢失数据,因为所有事务都写进slaverelay log中了,
  7. slave的数据是最新的。

半同步:after_commit

工作原理
  1. master将新的事务写入binlogbuffer),然后发送给slave
  2. 再然后直接syncdisk,然后直接commit,之后才接收slaveack应答返回给客户端。
  3. 不同客户端看到的数据可能不一样,对于发起事务的那个客户端,
  4. 只有在master提交事务且收到slaveack后才能看到提交的数据。
  5. 但对于那些非本次事务的客户端,他们在master提交后就能看到数据,
  6. 这时候master可能都还没收到slaveack应答。