MySQL主从同步之 异步复制 半同步复制 全同步复制

  • 1、异步复制
  • 2、半同步复制
  • 3、全同步复制

为了解决主从同步不一致的问题

1、异步复制

主库执行完提交事务后,立刻异步执行将结果返给给客户端,并不关心从库是否收到并处理。如果出现从库并未收到处理的情况,还是会有主从数据不一致的问题。期MySQL(5.5以前)仅仅支持异步复制。并且早期支持 myisam引擎。

2、半同步复制

主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到 relay log 中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟。
半同步复制的出现,就是为了保证在任何时刻主备数据一致的问题。相对于异步复制,半同步复制要求执行的每一个事务,都要求至少有一个备库成功接收后,才返回给用户。实现原理也很简单,主库本地执行完毕后,等待备库的响应消息(包含最新备库接收到的binlog(file,pos)),接收到备库响应消息后,再返回给用户,这样一个事务才算真正完成。在主库实例上,有一个专门的线程(ack_receiver)接收备库的响应消息,并以通知机制告知主库备库已经接收的日志,可以继续执行。

3、全同步复制

当主库提交事务之后,所有的从库节点必须收到、APPLY并且提交这些事务,然后主库线程才能继续做后续操作。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。