异步复制

MYSQL 默认异步复制,matser写完binlog后直接就提交任务,不关心主从复制过程。
不保证数据能写到slave。

半同步复制(AFTER_COMMIT) 老版本使用 不会采用

与半同步复制仅仅是等待的时机不同。先提交事务再等待。

弊端

同步slave过程中出现问题会造成会数据不一致。
主上已经提交了,但是日志还没来得及传到备库,这时候宕机了,在半同步看来,主库其他会话看来是透明的,看到的是他提交了的数据,但是如果这时候切换到slave,slave上又没有提交,没有看到这部分数据,这就矛盾了

半同步复制 增强版(AFTER_SYNC) 推荐

非常可靠 保证数据一致性
如果安装了半同步复制插件,则默认方式为增强版半同步复制
第一步中master写完binlog后的提交动作会被阻塞, 第六步 slave写完relay后会通知master唤醒正在提交的动作,然后引擎级别提交数据,不会等待slave执行成功。

弊端

阻塞过程会有一个最大等待时间(10秒),超过10秒回master会直接提交,并且同步方式由半同步复制**切换**为异步复制

image.png