复制通道
在MySQL多源复制中,一个从属服务器打开多个复制通道,每个主复制通道一个。复制通道表示从主机流向从机的事务的路径。每个复制通道都有其自己的接收器(I / O)线程,一个或多个应用程序(SQL)线程以及中继日志。通道的接收器线程接收到来自主服务器的事务后,会将它们添加到通道的中继日志文件中,并传递到通道的应用程序线程。这样可使每个通道独立运行。
本节介绍如何在复制拓扑中使用通道以及它们对单源复制的影响。有关配置主服务器和从服务器以进行多源复制,启动,停止和重置多源从属服务器以及监视多源复制的说明,请参见“ MySQL多源复制”。
在多源复制拓扑中的一个从属服务器上最多可以创建256个通道。每个复制通道必须具有唯一的(非空)名称,如“复制通道命名约定”中所述。启用多源复制时发出的错误代码和消息指定生成错误的通道。
注意多源复制从属服务器上的每个通道都必须从其他主服务器复制。您无法设置从单个从服务器到单个主机的多个复制通道。这是因为复制从属服务器的服务器ID在复制拓扑中必须唯一。主服务器仅通过从服务器的服务器ID来区分从服务器,而不能通过复制通道的名称来区分,因此它无法识别来自同一从服务器的不同复制通道。
通过将slave_parallel_workers系统变量设置为大于0的值,还可以将多源复制从属服务器设置为多线程复制从属服务器。在多源复制从属服务器上执行此操作时,从属服务器上的每个通道都具有指定数量的应用程序线程,再加上一个协调器线程来管理它们。您不能为单个通道配置应用程序线程数。
从MySQL 8.0开始,可以在特定复制通道上使用复制过滤器配置多源复制从属。当多个主服务器上存在相同的数据库或表时,可以使用通道特定的复制过滤器,并且您只需要从属服务器就可以从一个主服务器复制它。有关更多信息,请参见“基于复制通道的过滤器”。
为了提供与以前版本的兼容性,MySQL服务器在启动时自动创建一个默认通道,该通道的名称为空字符串("")。该频道始终存在;它不能由用户创建或销毁。如果未创建其他通道(具有非空名称),则复制语句仅在默认通道上起作用,以便来自较旧从属的所有复制语句均按预期运行(请参见“与以前的复制语句的兼容性”)。仅当存在至少一个命名通道时,才能使用本节中描述的复制通道。
单通道操作命令
为了使MySQL复制操作能够作用于各个复制通道,请将该子句与以下复制语句一起使用:FOR CHANNEL channel
- CHANGE MASTER TO
- START SLAVE
- STOP SLAVE
- SHOW RELAYLOG EVENTS
- FLUSH RELAY LOGS
- SHOW SLAVE STATUS
- RESET SLAVE
channel为以下功能引入了一个附加参数:
- MASTER_POS_WAIT()
该group_replication_recovery通道不允许使用以下语句:
- START SLAVE
- STOP SLAVE
该group_replication_applier通道不允许使用以下语句:
- START SLAVE
- STOP SLAVE
- SHOW SLAVE STATUS
FLUSH RELAY LOGS现在允许该group_replication_applier通道使用“允许”,但是如果在应用事务时接收到请求,则在事务结束后执行请求。请求者必须等待交易完成和轮换。此行为可防止拆分事务,这对于组复制是不允许的。
与以前的复制语句的兼容性
当复制从属具有多个通道且未指定选项时,有效语句通常会作用于所有可用通道,但有一些特定的例外。FOR CHANNEL channel
例如,对于某些“组复制”通道,以下语句的行为均符合预期:
- START SLAVE启动除- group_replication_recovery和- group_replication_applier通道之外的所有通道的复制线程。
- STOP SLAVE停止所有通道(- group_replication_recovery和和- group_replication_applier通道除外)的复制线程。
- SHOW SLAVE STATUS报告除- group_replication_applier通道之外的所有通道的状态。
- RESET SLAVE重置所有通道。
警告请
RESET SLAVE谨慎使用,因为此语句将删除所有现有通道,清除其中继日志文件并仅重新创建默认通道。
某些复制语句无法在所有通道上运行。在这种情况下,从站上将出现错误1964 多个通道。请提供频道名称作为参数。生成。在多源复制拓扑中使用以下语句和函数时,会产生此错误,并且未使用选项指定要对哪个通道进行操作:FOR CHANNEL channel
- SHOW RELAYLOG EVENTS
- CHANGE MASTER TO
- MASTER_POS_WAIT()
请注意,默认通道始终存在于单个源复制拓扑中,其中语句和函数的行为与MySQL早期版本中的行为相同。
启动选项和复制通道
本节介绍了受复制通道影响的启动选项。
必须正确配置以下启动设置才能使用多源复制。
- relay_log_info_repository。- 必须将其设置为 - TABLE。如果将此变量设置为- FILE,尝试将更多源添加到从属服务器失败- ER_SLAVE_NEW_CHANNEL_WRONG_REPOSITORY。- FILE现在已弃用该设置,它- TABLE是默认设置。
- master_info_repository- 必须将其设置为 - TABLE。如果将此变量设置为- FILE,尝试将更多源添加到从属服务器失败- ER_SLAVE_NEW_CHANNEL_WRONG_REPOSITORY。- FILE现在已弃用该设置,它- TABLE是默认设置。
现在,以下启动选项会影响复制拓扑中的所有通道。
- --log-slave-updates- 从站接收到的所有事务(甚至来自多个源)都被写入二进制日志中。 
- --relay-log-purge- 设置后,每个通道都会自动清除其自己的中继日志。 
- --slave_transaction_retries- 指定次数的事务重试可以在所有通道的所有应用线程上进行。 
- --skip-slave-start- 没有复制线程在任何通道上启动。 
- --slave-skip-errors- 执行继续,所有通道的错误均被跳过。 
为以下启动选项设置的值适用于每个通道。由于这些是mysqld启动选项,因此它们适用于每个通道。
- --max-relay-log-size=size- 每个通道的单个中继日志文件的最大大小;达到此限制后,将旋转文件。 
- --relay-log-space-limit=size- 每个通道的所有中继日志的总大小上限。对于 - N通道,这些日志的总大小限制为。- relay_log_space_limit *N
- --slave-parallel-workers=value- 每个通道的从并行工作者数。 
- slave_checkpoint_group- 每个源的I / O线程等待时间。 
- --relay-log-index=filename- 每个通道的中继日志索引文件的基本名称。请参见“复制通道命名约定”。 
- --relay-log=filename- 表示每个通道的中继日志文件的基本名称。请参见“复制通道命名约定”。 
- --slave_net-timeout=N- 为每个通道设置此值,以便每个通道等待 - N几秒钟以检查断开的连接。
- --slave-skip-counter=N- 为每个通道设置此值,以便每个通道跳过 - N其主站的事件。
复制通道命名约定
本节介绍复制通道如何影响命名约定。
每个复制通道都有一个唯一的名称,该名称是一个字符串,最大长度为64个字符,并且不区分大小写。因为在从属表中使用了通道名称,所以用于它们的字符集始终为UTF-8。尽管通常可以自由使用任何名称作为频道,但保留以下名称:
- group_replication_applier
- group_replication_recovery
您为复制通道选择的名称也会影响多源复制从属设备使用的文件名。每个通道的中继日志文件和索引文件都命名为,其中是使用系统变量指定的基本名称,也是登录到该文件的通道的名称。如果未指定系统变量,则使用默认文件名,其中还包括通道名。relay_log_basename-channel.xxxxxxrelay_log_basenamerelay_logchannelrelay_log
