18.1.1.1 源到副本复制

传统的 MySQL复制 提供了一种简单的从源到副本的复制方法。source是primary,有一个或多个replicas,就是secondary。源应用事务,提交它们,然后它们稍后(因此异步)发送到副本以重新执行(在基于语句的复制中)或应用(在基于行的复制中)。它是一个无共享系统,默认情况下所有服务器都有数据的完整副本。

图 18.1 MySQL 异步复制

源接收到的事务被执行,写入二进制日志,然后提交,并将响应发送到客户端应用程序。 在源上进行提交之前,二进制日志中的记录将发送到副本 1 和副本 2 上的中继日志。 在每个副本上,事务被应用、写入副本的二进制日志并提交。 源上的提交和副本上的提交都是独立和异步的。

还有半同步复制,它在协议中增加了一个同步步骤。这意味着主节点在申请时等待从节点确认它已收到事务。只有这样,主节点才会恢复提交操作。

图 18.2 MySQL 半同步复制

源接收到的事务被执行并写入二进制日志。 二进制日志中的记录被发送到副本 1 和副本 2 上的中继日志。然后源等待来自副本的确认。 当两个副本都返回确认时,源提交事务,并将响应发送到客户端应用程序。 在每个副本返回确认后,它应用事务,将其写入二进制日志并提交。 源上的提交取决于副本的确认,但副本上的提交相互独立,也独立于源上的提交。

在这两张图片中,有一张经典的异步 MySQL 复制协议(及其半同步变体)的图表。不同实例之间的箭头表示服务器之间交换的消息或服务器与客户端应用程序之间交换的消息。