在 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 节,“与之前的复制语句兼容”)。仅当至少存在一个命名通道时,才能使用本节中描述的适用于复制通道的语句。