传统的 MySQL复制提供了一种简单的源到副本复制方法。源是主要的,并且有一个或多个副本,这些副本是辅助的。源应用事务,提交它们,然后将它们(因此异步)发送到副本以重新执行(在基于语句的复制中)或应用(在基于行的复制中)。它是一个无共享系统,默认情况下所有服务器都拥有数据的完整副本。
MySQL异步复制
执行源接收到的事务,将其写入二进制日志,然后提交,并将响应发送到客户端应用程序。 在源上进行提交之前,二进制日志中的记录将发送到副本 1 和副本 2 上的中继日志。 在每个副本上,应用事务、写入副本的二进制日志并提交。 源上的提交和副本上的提交都是独立且异步的。

执行源接收到的事务,将其写入二进制日志,然后提交,并将响应发送到客户端应用程序。 在源上进行提交之前,二进制日志中的记录将发送到副本 1 和副本 2 上的中继日志。 在每个副本上,应用事务、写入副本的二进制日志并提交。 源上的提交和副本上的提交都是独立且异步的。
还有一种半同步复制,它在协议中添加了一个同步步骤。这意味着主服务器在应用时等待辅助服务器确认它已收到事务。只有这样主数据库才会恢复提交操作。
MySQL半同步复制
源接收到的事务被执行并写入二进制日志。 二进制日志中的记录将发送到副本 1 和副本 2 上的中继日志。然后,源等待副本的确认。 当两个副本都返回确认时,源提交事务,并将响应发送到客户端应用程序。 每个副本返回其确认后,它会应用事务,将其写入二进制日志,然后提交。 源上的提交取决于副本的确认,但副本上的提交彼此独立,也独立于源上的提交。

源接收到的事务被执行并写入二进制日志。 二进制日志中的记录将发送到副本 1 和副本 2 上的中继日志。然后,源等待副本的确认。 当两个副本都返回确认时,源提交事务,并将响应发送到客户端应用程序。 每个副本返回其确认后,它会应用事务,将其写入二进制日志,然后提交。 源上的提交取决于副本的确认,但副本上的提交彼此独立,也独立于源上的提交。
在这两张图片中,有一个经典异步 MySQL 复制协议(及其半同步变体)的图表。不同实例之间的箭头表示服务器之间交换的消息或服务器与客户端应用程序之间交换的消息。




