在 MySQL 多源复制中,副本打开多个复制通道,每个源服务器一个。这些复制通道表示从源到副本的交易流程。每个复制通道都有其自己的接收器(I/O)线程、一个或多个应用程序(SQL)线程和中继日志文件。当源的交易被接收器线程接收时,它们将被添加到通道的中继日志文件中,并传递给通道的应用程序线程。这使每个通道能够独立地工作。
本节描述了通道在复制拓扑中的使用方式,以及它们对单源复制的影响。有关配置源和副本的多源复制、启动、停止和重置多源副本,以及监控多源复制的说明,请参阅 第 19.1.5 节,“MySQL 多源复制”。
在多源复制拓扑中,一个副本服务器上可以创建的最大通道数为 256。每个复制通道必须有一个唯一的(非空)名称,如 第 19.2.2.4 节,“复制通道命名约定” 所述。启用多源复制时,错误代码和消息将指定生成错误的通道。
每个多源副本上的每个通道必须从不同的源复制。你不能从单个源设置多个复制通道到单个副本。这是因为副本的服务器 ID 在复制拓扑中必须是唯一的,源服务器只能通过副本的服务器 ID 来区分副本,而不是通过复制通道的名称。
多源副本也可以设置为多线程副本,方法是将系统变量 replica_parallel_workers
设置为大于 0 的值。当你在多源副本上这样做时,每个通道上的副本都将具有指定数量的应用程序线程,另外还有一个协调器线程来管理它们。你不能为单个通道配置应用程序线程的数量。
多源副本可以配置特定复制通道的复制过滤器。当同一个数据库或表出现在多个源上时,你只需要副本从一个源复制它。对于基于 GTID 的复制,如果同一交易可能来自多个源(例如在菱形拓扑中),你必须确保所有通道上的过滤器设置相同。有关更多信息,请参阅 第 19.2.5.4 节,“复制通道基于过滤器”。
为了与之前的版本兼容,MySQL 服务器在启动时自动创建一个默认通道,其名称为空字符串 (""
)。这个通道总是存在的;它不能被用户创建或销毁。如果没有其他通道(具有非空名称)被创建,复制语句将仅作用于默认通道,以便所有来自旧副本的复制语句都能正常工作(见 第 19.2.2.2 节,“与之前复制语句的兼容性”)。本节中描述的复制通道语句只能在至少有一个命名通道时使用。