#### 13.4.2.3 将复制源更改为语句

[](<>)

```
CHANGE REPLICATION SOURCE TO option [, option] ... [ channel_option ]

option: {
    SOURCE_BIND = 'interface_name'
  | SOURCE_HOST = 'host_name'
  | SOURCE_USER = 'user_name'
  | SOURCE_PASSWORD = 'password'
  | SOURCE_PORT = port_num
  | PRIVILEGE_CHECKS_USER = {NULL | 'account'}
  | REQUIRE_ROW_FORMAT = {0|1}
  | REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF}
  | ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL | uuid}
  | SOURCE_LOG_FILE = 'source_log_name'
  | SOURCE_LOG_POS = source_log_pos
  | SOURCE_AUTO_POSITION = {0|1}
  | RELAY_LOG_FILE = 'relay_log_name'
  | RELAY_LOG_POS = relay_log_pos
  | SOURCE_HEARTBEAT_PERIOD = interval
  | SOURCE_CONNECT_RETRY = interval
  | SOURCE_RETRY_COUNT = count
  | SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}
  | SOURCE_DELAY = interval
  | SOURCE_COMPRESSION_ALGORITHMS = 'algorithm[,algorithm][,algorithm]'
  | SOURCE_ZSTD_COMPRESSION_LEVEL = level
  | SOURCE_SSL = {0|1}
  | SOURCE_SSL_CA = 'ca_file_name'
  | SOURCE_SSL_CAPATH = 'ca_directory_name'
  | SOURCE_SSL_CERT = 'cert_file_name'
  | SOURCE_SSL_CRL = 'crl_file_name'
  | SOURCE_SSL_CRLPATH = 'crl_directory_name'
  | SOURCE_SSL_KEY = 'key_file_name'
  | SOURCE_SSL_CIPHER = 'cipher_list'
  | SOURCE_SSL_VERIFY_SERVER_CERT = {0|1}
  | SOURCE_TLS_VERSION = 'protocol_list'
  | SOURCE_TLS_CIPHERSUITES = 'ciphersuite_list'
  | SOURCE_PUBLIC_KEY_PATH = 'key_file_name'
  | GET_SOURCE_PUBLIC_KEY = {0|1}
  | NETWORK_NAMESPACE = 'namespace'
  | IGNORE_SERVER_IDS = (server_id_list),
  | GTID_ONLY = {0|1}
}

channel_option:
    FOR CHANNEL channel

server_id_list:
    [server_id [, server_id] ... ]
```

[`将复制源更改为`](change-replication-source-to.html)更改副本服务器用于连接到源和从源读取数据的参数。它还更新复制元数据存储库的内容（请参阅[第 17.2.4 节，“中继日志和复制元数据存储库”](replica-logs.html)）。从 MySQL 8.0.23 开始，使用[`将复制源更改为`](change-replication-source-to.html)代替[`将主更改为`](change-master-to.html)，该版本已弃用。在 MySQL 8.0.23 之前的版本中，使用[`将主更改为`](change-master-to.html).

[`将复制源更改为`](change-replication-source-to.html)需要[`REPLICATION_SLAVE_ADMIN`](privileges-provided.html#priv_replication-slave-admin)特权（或已弃用的[`极好的`](privileges-provided.html#priv_super)特权）。

您未指定的选项[`将复制源更改为`](change-replication-source-to.html)声明保留其价值，除非在以下讨论中指出。在大多数情况下，因此无需指定不变的选项。

用于的值`SOURCE_HOST`和别的[`将复制源更改为`](change-replication-source-to.html)检查选项是否有换行符（`\n`要么`0x0A`） 人物。这些值中存在此类字符会导致语句失败并出现错误。

可选的`对于频道 *`渠道`*`子句使您能够命名该语句适用于哪个复制通道。提供一个`对于频道 *`渠道`*`条款适用于[`将复制源更改为`](change-replication-source-to.html)声明到特定的复制通道，用于添加新通道或修改现有通道。例如，要添加一个名为`通道2`：

```
CHANGE REPLICATION SOURCE TO SOURCE_HOST=host1, SOURCE_PORT=3002 FOR CHANNEL 'channel2'
```

如果没有命名子句并且不存在额外的通道，则[`将复制源更改为`](change-replication-source-to.html)声明适用于默认通道，其名称为空字符串 ("")。当您设置了多个复制通道时，每个[`将复制源更改为`](change-replication-source-to.html)语句必须使用`对于频道 *`渠道`*`条款。看[第 17.2.2 节，“复制通道”](replication-channels.html)了解更多信息。

对于一些选项[`将复制源更改为`](change-replication-source-to.html)声明，您必须发出[`停止复制`](stop-replica.html)发出前声明[`将复制源更改为`](change-replication-source-to.html)声明（和一个[`开始复制`](start-replica.html)后声明）。有时，您只需要停止复制 SQL（应用程序）线程或复制 I/O（接收器）线程，而不是两者：

-   当应用程序线程停止时，您可以执行[`将复制源更改为`](change-replication-source-to.html)使用其他允许的任何组合`RELAY_LOG_FILE`,`RELAY_LOG_POS`， 和`SOURCE_DELAY`选项，即使复制接收器线程正在运行。当接收线程正在运行时，此语句不能使用其他选项。

-   当接收线程停止时，可以执行[`将复制源更改为`](change-replication-source-to.html)使用此语句的任何选项（以任何允许的组合）*除了* `RELAY_LOG_FILE`,`RELAY_LOG_POS`,`SOURCE_DELAY`， 要么`SOURCE_AUTO_POSITION = 1`即使应用程序线程正在运行。

-   接收者线程和应用程序线程都必须在发出之前停止[`将复制源更改为`](change-replication-source-to.html)使用的声明`SOURCE_AUTO_POSITION = 1`,`GTID_ONLY = 1`， 要么`ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS`.

    您可以使用检查复制应用程序线程和复制接收者线程的当前状态[`显示副本状态`](show-replica-status.html).请注意，组复制应用程序通道 (`group_replication_applier`) 没有接收线程，只有一个应用线程。

[`将复制源更改为`](change-replication-source-to.html)语句有许多副作用和相互作用，您应该事先了解：

-   [`将复制源更改为`](change-replication-source-to.html)导致正在进行的事务的隐式提交。看[第 13.3.3 节，“导致隐式提交的语句”](implicit-commit.html).

-   [`将复制源更改为`](change-replication-source-to.html)导致先前的值`SOURCE_HOST`,`SOURCE_PORT`,`SOURCE_LOG_FILE`， 和`SOURCE_LOG_POS`要写入错误日志，以及执行之前有关副本状态的其他信息。

-   如果您使用基于语句的复制和临时表，则可以[`将复制源更改为`](change-replication-source-to.html)后面的声明[`停止复制`](stop-replica.html)语句以在副本上留下临时表。一个警告 （[`ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_warn_open_temp_tables_must_be_zero)) 在发生这种情况时发出。在这种情况下，您可以通过确保[`副本\u打开\u临时\u表`](server-status-variables.html#statvar_Replica_open_temp_tables)或[`从属\u打开\u临时\u表`](server-status-variables.html#statvar_Slave_open_temp_tables)系统状态变量在执行这样的操作之前等于0[`将复制源更改为`](change-replication-source-to.html)陈述

-   使用多线程复制副本时([`复制并行工作人员`](replication-options-replica.html#sysvar_replica_parallel_workers) >0），停止复制副本可能会导致从中继日志执行的事务序列出现间隔，无论复制副本是有意还是无意停止的。当存在这种差距时[`将复制源更改为`](change-replication-source-to.html)失败。这种情况下的解决办法是[`开始复制，直到SQL\u在\u MTS\u间隙之后`](start-replica.html)这确保了差距的缩小。从MySQL 8.0.26开始，当使用基于GTID的复制和GTID自动定位时，会完全跳过检查事务序列中的间隙的过程，因为可以使用GTID自动定位来解决事务中的间隙。在这种情况下，[`将复制源更改为`](change-replication-source-to.html)仍然可以使用。

    以下选项可供选择：[`将复制源更改为`](change-replication-source-to.html)声明：

`将_gtid_分配给_匿名_事务={OFF | LOCAL |*`乌伊德`*}`

使复制通道将GTID分配给没有GTID的复制事务，从而允许从不使用基于GTID的复制的源复制到使用GTID的复制副本。对于多源复制副本，可以混合使用`将_gtid_分配给_匿名_事务`，以及不包括在内的频道。默认值是`关`，表示未使用该功能。

`地方的`分配一个GTID，包括复制副本自己的UUID（[`服务器_uuid`](replication-options.html#sysvar_server_uuid)设置）。`*`乌伊德`*`分配包含指定UUID的GTID，例如[`服务器_uuid`](replication-options.html#sysvar_server_uuid)复制源服务器的设置。使用非本地UUID可以区分源于副本的事务和源上的事务，对于多源副本，可以区分源于不同源的事务。您选择的UUID仅对副本的自身使用具有重要意义。如果源发送的任何事务已经有GTID，则会保留该GTID。

无法使用特定于组复制的通道`将_gtid_分配给_匿名_事务`，但作为组复制组成员的服务器实例上的另一个源的异步复制通道可以这样做。在这种情况下，不要将组复制组名称指定为用于创建GTID的UUID。

设置`将_gtid_分配给_匿名_事务`到`地方的`或`*`乌伊德`*`，复制副本必须具有[`gtid_模式=开启`](replication-options-gtids.html#sysvar_gtid_mode)设置，之后无法更改。此选项用于具有基于二进制日志文件位置的复制的源，因此`主自动位置=1`无法为该频道设置。在设置此选项之前，必须停止复制SQL线程和复制I/O（接收器）线程。

重要的

一个用`将_gtid_分配给_匿名_事务`在需要故障切换的情况下，无法升级任何通道上的复制源服务器以替换复制源服务器，并且无法使用从复制副本获取的备份来恢复复制源服务器。同样的限制也适用于替换或恢复使用`将_gtid_分配给_匿名_事务`在任何频道。

有关更多限制和信息，请参阅[第17.1.3.6节，“从没有GTID的源复制到有GTID的副本”](replication-gtids-assign-anon.html).

`获取_SOURCE_PUBLIC_KEY={0 | 1}`

通过从源请求公钥，启用基于RSA密钥对的密码交换。默认情况下，该选项处于禁用状态。

此选项适用于通过`缓存_sha2_密码`身份验证插件。对于使用此插件进行身份验证的帐户连接，除非请求，否则源不会发送公钥，因此必须在客户端请求或指定公钥。如果`源\公共\密钥\路径`给定并指定有效的公钥文件，它优先于`获取\u源\u公钥`。如果您使用的复制用户帐户通过`缓存_sha2_密码`插件（这是MySQL 8.0的默认设置），如果您没有使用安全连接，则必须指定此选项或`源\公共\密钥\路径`为复制副本提供RSA公钥的选项。

`GTID_ONLY={0|1}`

停止复制通道在复制元数据存储库中持久化文件名和文件位置。`仅限GTID_`从MySQL 8.0.27开始提供。这个`仅限GTID_`对于异步复制通道，默认情况下禁用该选项，但对于组复制通道，默认情况下启用该选项，并且不能对它们禁用该选项。

对于具有此设置的复制通道，仍然会跟踪内存中的文件位置，并且仍然可以在错误消息中以及通过诸如`显示副本状态`声明（如果声明过期，则显示为无效）。但是，在基于GTID的复制实际上不需要写入和读取文件位置的情况下（包括事务队列和应用程序进程），可以避免保存和检查文件位置所需的写入和读取操作。

仅当复制SQL（applier）线程和复制I/O（receiver）线程都停止时，才能使用此选项。设置`仅GTID_=1`对于复制通道，服务器上必须使用GTID([`gtid_模式=开启`](replication-options-gtids.html#sysvar_gtid_mode))，并且源上必须使用基于行的二进制日志记录（不支持基于语句的复制）。选项`REQUIRE_ROW_FORMAT=1`和`SOURCE_AUTO_POSITION=1`必须为复制通道设置。

什么时候`仅GTID_=1`设置后，复制副本将使用[`副本\u并行\u工作者=1`](replication-options-replica.html#sysvar_replica_parallel_workers)如果服务器的系统变量设置为零，那么从技术上讲，它始终是一个多线程应用程序。这是因为多线程应用程序使用保存的位置而不是复制元数据存储库来定位需要重新应用的事务的开始。

如果你禁用`仅限GTID_`设置后，现有的中继日志将被删除，现有的已知二进制日志文件位置将被保留，即使它们已过时。复制元数据存储库中二进制日志和中继日志的文件位置可能无效，如果是这种情况，将返回警告。前提是`震源自动位置`仍然启用，GTID自动定位用于提供正确的定位。

如果你也禁用`震源自动位置`，复制元数据存储库中二进制日志和中继日志的文件位置用于定位（如果它们有效）。如果它们被标记为无效，则必须提供有效的二进制日志文件名和位置(`源日志文件`和`来源_日志_位置`)。如果还提供中继日志文件名和位置(`中继日志文件`和`继电器日志位置`)，继电器日志将被保留，应用程序位置将被设置为指定位置。GTID auto skip确保跳过已应用的任何事务，即使最终应用程序位置不正确。

`忽略服务器ID=(*`服务器id列表`*)`

使复制副本忽略源自指定服务器的事件。该选项采用逗号分隔的0个或多个服务器ID列表。服务器的日志旋转和删除事件不会被忽略，并记录在中继日志中。

在循环复制中，发起服务器通常充当其自身事件的终止器，因此不会多次应用这些事件。因此，当删除循环中的一个服务器时，此选项在循环复制中非常有用。假设您有一个包含4台服务器的循环复制设置，服务器ID为1、2、3和4，而服务器3出现故障。通过启动从服务器2到服务器4的复制来缩小差距时，可以包括`忽略服务器ID=（3）`在[`将复制源更改为`](change-replication-source-to.html)您在服务器4上发出的语句，告诉它使用服务器2而不是服务器3作为源。这样做会导致它忽略并且不会传播任何源于不再使用的服务器的语句。

如果`忽略服务器ID`包含服务器自己的ID，并且服务器是用[`--复制相同的服务器id`](replication-options-replica.html#option_mysqld_replicate-same-server-id)选项启用时，会出现错误。

笔记

当全局事务标识符（GTID）用于复制时，已经应用的事务将自动被忽略，因此`忽略服务器ID`函数不是必需的，已弃用。如果[`gtid_模式=开启`](replication-options-gtids.html#sysvar_gtid_mode)如果为服务器设置了，则如果包含`忽略服务器ID`a中的选项[`将复制源更改为`](change-replication-source-to.html)陈述

源元数据存储库和[`显示副本状态`](show-replica-status.html)提供当前被忽略的服务器列表。有关更多信息，请参阅[第17.2.4.2节，“复制元数据存储库”](replica-logs-status.html)和[第13.7.7.35节，“显示副本状态声明”](show-replica-status.html).

如果[`将复制源更改为`](change-replication-source-to.html)这份声明没有发表任何声明`忽略服务器ID`选项，则保留任何现有列表。要清除被忽略服务器的列表，必须使用空列表选项：

```
CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = ();
```

[`全部重置副本`](reset-replica.html)清除`忽略服务器ID`.

笔记

如果出现以下情况，将发出弃用警告：`设置GTID_MODE=ON`当任何通道的现有服务器ID设置为`忽略服务器ID`。在启动基于GTID的复制之前，请检查并清除相关服务器上所有被忽略的服务器ID列表。这个[`显示副本状态`](show-replica-status.html)语句显示被忽略ID的列表（如果有）。如果您确实收到了弃用警告，您仍然可以在之后清除列表[`gtid_模式=开启`](replication-options-gtids.html#sysvar_gtid_mode)通过发布[`将复制源更改为`](change-replication-source-to.html)包含`忽略服务器ID`带有空列表的选项。

`网络*`名称空间`*'`

用于到复制源服务器的TCP/IP连接的网络名称空间，如果使用MySQL通信堆栈，则用于组复制的组通信连接。字符串值的最大长度为64个字符。如果省略此选项，则来自复制副本的连接将使用默认（全局）命名空间。在未实现网络命名空间支持的平台上，复制副本尝试连接到源时会发生故障。有关网络名称空间的信息，请参阅[第5.1.14节，“网络名称空间支持”](network-namespace-support.html). `网络名称空间`从MySQL 8.0.22开始提供。

`特权检查用户={NULL |'*`账户`*'}`

命名为指定通道提供安全上下文的用户帐户。`空值`，这是默认值，表示不使用安全上下文。`PRIVILEGE_CHECKS_USER`自 MySQL 8.0.18 起可用。

用户帐户的用户名和主机名必须遵循中描述的语法[第 6.2.4 节，“指定帐户名称”](account-names.html)，并且用户不能是匿名用户（用户名为空）或`当前用户`.该帐户必须具有[`REPLICATION_APPLIER`](privileges-provided.html#priv_replication-applier)权限，加上执行在通道上复制的事务所需的权限。有关帐户所需权限的详细信息，请参阅[第 17.3.3 节，“复制权限检查”](replication-privilege-checks.html).当您重新启动复制通道时，将从该点开始应用权限检查。如果您未指定通道且不存在其他通道，则该语句将应用于默认通道。

强烈建议在以下情况下使用基于行的二进制日志记录`PRIVILEGE_CHECKS_USER`已设置，您可以设置`REQUIRE_ROW_FORMAT`强制执行。例如，在通道上启动权限检查`频道_1`在正在运行的副本上，发出以下语句：

```
mysql> STOP REPLICA FOR CHANNEL 'channel_1';
mysql> CHANGE REPLICATION SOURCE TO
         PRIVILEGE_CHECKS_USER = 'priv_repl'@'%.example.com',
         REQUIRE_ROW_FORMAT = 1,
         FOR CHANNEL 'channel_1';
mysql> START REPLICA FOR CHANNEL 'channel_1';
```

`RELAY_LOG_FILE = '*`中继日志文件`*'`,`RELAY_LOG_POS = '*`中继日志位置`*'`

中继日志文件名和该文件中的位置，复制 SQL 线程在下次启动线程时开始从副本的中继日志读取。`RELAY_LOG_FILE`可以使用绝对路径或相对路径，并使用与`源日志文件`。字符串值的最大长度为511个字符。

A.`将复制源更改为`语句使用`中继日志文件`,`继电器日志位置`，或者当复制SQL（applier）线程停止时，这两个选项都可以在正在运行的复制副本上执行。如果至少有一个复制应用程序线程和复制I/O（接收器）线程正在运行，则会保留中继日志。如果两个线程都停止，则删除所有中继日志文件，除非其中至少有一个线程停止`中继日志文件`或`继电器日志位置`是指定的。对于组复制应用程序通道(`组复制应用程序`)，它只有一个applier线程，没有接收器线程，如果applier线程停止，则会出现这种情况，但使用该通道时，您无法使用`中继日志文件`和`继电器日志位置`选项。

`REQUIRE_ROW_FORMAT={0 | 1}`

仅允许复制通道处理基于行的复制事件。此选项可防止复制应用程序执行创建临时表和执行`加载数据填充`请求，从而提高通道的安全性。这个`需要行格式`对于异步复制通道，默认情况下禁用该选项，但对于组复制通道，默认情况下启用该选项，并且不能对它们禁用该选项。有关更多信息，请参阅[第17.3.3节，“复制权限检查”](replication-privilege-checks.html).`需要行格式`从MySQL 8.0.19开始提供。

`REQUIRE_TABLE_PRIMARY_KEY_CHECK={STREAM | ON | OFF}`

使复制副本能够为主键检查选择自己的策略。默认值是`流动`. `需要\u表\u主键\u检查`从MySQL 8.0.20开始提供。

当选项设置为`在…上`对于复制通道，复制副本始终使用`在…上`对于[`sql\u需要\u主键`](server-system-variables.html#sysvar_sql_require_primary_key)复制操作中的系统变量，需要主键。当选项设置为`关`，复制副本始终使用该值`关`对于[`sql\u需要\u主键`](server-system-variables.html#sysvar_sql_require_primary_key)复制操作中的系统变量，因此不需要主键，即使源需要主键。当`需要\u表\u主键\u检查`选项设置为`流动`，这是默认值，复制副本使用从源为每个事务复制的任何值。

对于多源复制，请设置`需要\u表\u主键\u检查`到`在…上`或`关`允许复制副本跨不同源的复制通道规范化行为，并为复制副本保持一致的设置[`sql\u需要\u主键`](server-system-variables.html#sysvar_sql_require_primary_key)系统变量。使用`在…上`防止在多个源更新同一组表时意外丢失主键。使用`关`允许可以操纵主键的源与不能操纵主键的源一起工作。

什么时候`权限检查用户`设定好了，设定好了`需要\u表\u主键\u检查`到`在…上`或`关`意味着用户帐户不需要会话管理级别的权限来设置受限会话变量，这是更改[`sql\u需要\u主键`](server-system-variables.html#sysvar_sql_require_primary_key)以匹配每个事务的源设置。有关更多信息，请参阅[第17.3.3节，“复制权限检查”](replication-privilege-checks.html).

`SOURCE_AUTO_POSITION={0 | 1}`

使复制副本尝试使用基于GTID的复制的自动定位功能连接到源，而不是基于二进制日志文件的位置。此选项用于使用基于GTID的复制启动复制副本。默认值为0，这意味着不使用GTID自动定位和基于GTID的复制。此选项可用于`将复制源更改为`仅当复制SQL（应用程序）线程和复制I/O（接收器）线程都停止时。

副本和源都必须启用GTID([`GTID_模式=开启`](replication-options-gtids.html#sysvar_gtid_mode), `在允许的情况下，`或`不允许的`在复制品上，以及[`GTID_模式=开启`](replication-options-gtids.html#sysvar_gtid_mode)在源头上）。`源日志文件`, `来源_日志_位置`, `中继日志文件`和`继电器日志位置`不能与一起指定`SOURCE_AUTO_POSITION=1`。如果在副本上启用了多源复制，则需要设置`SOURCE_AUTO_POSITION=1`每个适用复制通道的选项。

具有`SOURCE_AUTO_POSITION=1`set，在初始连接握手中，复制副本发送一个GTID集，其中包含它已经接收、提交或同时提交的事务。源通过发送二进制日志中记录的所有事务进行响应，这些事务的GTID不包括在副本发送的GTID集中。此交换可确保源仅发送具有复制副本尚未记录或提交的GTID的事务。如果复制副本从多个源接收事务（如菱形拓扑），自动跳过功能将确保不会应用两次事务。有关如何计算复制副本发送的GTID集的详细信息，请参阅[第17.1.3.3节，“GTID自动定位”](replication-gtids-auto-positioning.html).

如果源应发送的任何事务已从源的二进制日志中清除，或添加到[`gtid_`](replication-options-gtids.html#sysvar_gtid_purged)系统变量通过另一种方法，源发送错误[`ER_MASTER_已清除_所需的_GTID`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_master_has_purged_required_gtids)复制到复制副本，复制不会启动。丢失的已清除事务的GTID已识别，并在警告消息中的源错误日志中列出[`呃，你找到了失踪的证件`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_found_missing_gtids)。此外，如果在事务交换过程中发现副本已在GTID中记录或提交了具有源UUID的事务，但源本身尚未提交，则源将发送错误[`奴隶比主人有更多的ID`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_slave_has_more_gtids_than_master)复制到复制副本，复制不会启动。有关如何处理这些情况的信息，请参阅[第17.1.3.3节，“GTID自动定位”](replication-gtids-auto-positioning.html).

通过检查性能模式，可以查看复制是否在启用GTID自动定位的情况下运行[`复制\u连接\u状态`](performance-schema-replication-connection-status-table.html)表或[`显示副本状态`](show-replica-status.html).禁用`震源自动位置`选项再次使复制副本恢复为基于文件的复制。

`来源(u)*`接口名称`*'`

确定选择哪个复制副本的网络接口连接到源，以便在具有多个网络接口的复制副本上使用。指定网络接口的IP地址。字符串值的最大长度为255个字符。

配置了此选项的IP地址（如果有）可以在`源绑定`列中的输出[`显示副本状态`](show-replica-status.html)。在源元数据存储库表中`mysql。奴隶主信息`，该值可以被视为`源绑定`柱NDB Cluster还支持将副本绑定到特定网络接口的功能。

`源压缩算法*`算法`*[,*`算法`*][,*`算法`*]'`

为与复制源服务器的连接指定一个、两个或三个允许的压缩算法，用逗号分隔。字符串值的最大长度为99个字符。默认值为`未压缩`.

可用的算法有`兹利布`, `zstd`和`未压缩`，与[`协议压缩算法`](server-system-variables.html#sysvar_protocol_compression_algorithms)系统变量。算法可以按任何顺序指定，但这不是偏好顺序——算法协商过程试图使用`兹利布`然后`zstd`然后`未压缩`，如果指定了。`源压缩算法`从MySQL 8.0.18开始提供。

价值`源压缩算法`仅在以下情况下适用：[`副本压缩协议`](replication-options-replica.html#sysvar_replica_compressed_protocol)或[`slave_压缩_协议`](replication-options-replica.html#sysvar_slave_compressed_protocol)系统变量已禁用。如果[`副本压缩协议`](replication-options-replica.html#sysvar_replica_compressed_protocol)或[`slave_压缩_协议`](replication-options-replica.html#sysvar_slave_compressed_protocol)如果启用，则优先于`源压缩算法`以及与源使用的连接`兹利布`压缩，如果源和副本都支持该算法。有关更多信息，请参阅[第4.2.8节，“连接压缩控制”](connection-compression-control.html).

二进制日志事务压缩（从MySQL 8.0.20开始提供），由[`binlog_事务_压缩`](replication-options-binary-log.html#sysvar_binlog_transaction_compression)系统变量，也可以用来节省带宽。如果与连接压缩结合使用，则连接压缩对数据的作用机会较小，但仍然可以压缩头以及未压缩的事件和事务有效负载。有关二进制日志事务压缩的更多信息，请参阅[第5.4.4.5节，“二进制日志事务压缩”](binary-log-transaction-compression.html).

`源\连接\重试=*`间隔`*`

指定复制副本在与源的连接超时后进行的重新连接尝试之间的间隔（以秒为单位）。默认间隔为60。

尝试的次数受时间限制`来源_重试_计数`选项如果使用了这两种默认设置，则复制副本会在重新连接尝试之间等待60秒(`SOURCE_CONNECT_RETRY=60`)，并一直尝试以这种速度重新连接60天(`来源_重试_计数=86400`)。这些值记录在源元数据存储库中，并显示在[`复制\连接\配置`](performance-schema-replication-connection-configuration-table.html)性能模式表。

`SOURCE_CONNECTION_AUTO_FAILOVER={0 | 1}`

如果有一个或多个备用复制源服务器可用（如果有多个MySQL服务器或共享复制数据的服务器组），则激活复制通道的异步连接故障切换机制。`源连接自动故障切换`从MySQL 8.0.22开始提供。默认值为0，表示该机制未激活。有关设置此功能的完整信息和说明，请参阅[第17.4.9.2节，“副本的异步连接故障切换”](replication-asynchronous-connection-failover-replica.html).

异步连接故障切换机制在由控制的重新连接尝试之后接管`源\连接\重试`和`来源_重试_计数`他们精疲力竭。它会将复制副本重新连接到从指定源列表中选择的备用源，您可以使用[`异步连接故障切换添加源`](replication-functions-source-list.html#function_asynchronous-connection-failover-add-source)和[`异步连接故障转移删除源`](replication-functions-source-list.html#function_asynchronous-connection-failover-delete-source)功能。要添加和删除托管服务器组，请使用[`异步连接故障切换添加管理`](replication-functions-source-list.html#function_asynchronous-connection-failover-add-managed)和[`异步连接故障切换删除管理`](replication-functions-source-list.html#function_asynchronous-connection-failover-delete-managed)功能相反。有关更多信息，请参阅[第17.4.9节，“使用异步连接故障切换切换源和副本”](replication-asynchronous-connection-failover.html).

重要的

1.  你只能设置`源连接自动故障切换=1`当使用GTID自动定位时(`SOURCE_AUTO_POSITION=1`).

2.  当你设定`源连接自动故障切换=1`设置`来源_重试_计数`和`源\连接\重试`如果连接失败是由短暂的网络中断引起的，则只允许对同一来源进行几次重试尝试的最小数量。否则，异步连接故障切换机制无法立即激活。合适的值是`源\重试\计数=3`和`SOURCE_CONNECT_RETRY=10`，使复制副本以10秒的间隔重试连接3次。

3.  当你设定`源连接自动故障切换=1`，复制元数据存储库必须包含复制用户帐户的凭据，该帐户可用于连接到复制通道源列表上的所有服务器。该帐户还必须具有`选择`对性能架构表的权限。可以使用[`将复制源更改为`](change-replication-source-to.html)声明`源用户`和`源密码`选项。有关更多信息，请参阅[第17.4.9节，“使用异步连接故障切换切换源和副本”](replication-asynchronous-connection-failover.html).

4.  从MySQL 8.0.27，当您设置`源连接自动故障切换=1`，如果此复制通道位于单主模式下组中的组复制主上，则复制副本的异步连接故障切换将自动激活。此功能处于活动状态时，如果正在复制的主设备脱机或进入错误状态，则新主设备在选择时将在同一通道上启动复制。如果要使用该功能，还必须在复制组中的所有辅助服务器以及任何新加入的成员上设置此复制通道。（如果服务器是使用MySQL的克隆功能配置的，这一切都会自动发生。）如果不想使用该功能，请使用[`组\复制\禁用\成员\操作`](group-replication-functions-for-member-actions.html#function_group-replication-disable-member-action)用于禁用组复制成员操作的函数`mysql\u启动\u故障切换\u通道\u如果\u主`，这是默认启用的。有关更多信息，请参阅[第17.4.9.2节，“副本的异步连接故障切换”](replication-asynchronous-connection-failover-replica.html).

`源_延迟=*`间隔`*`

指定复制副本必须落后于源的秒数。从源接收到的事件至少在*`间隔`*比它在源上执行的时间晚几秒。*`间隔`*必须是0到2范围内的非负整数<sup>31</sup>−1.默认值为0。有关更多信息，请参阅[第17.4.11节，“延迟复制”](replication-delayed.html).

A.`将复制源更改为`使用`源延迟`当复制SQL线程停止时，可以在正在运行的复制副本上执行选项。

`源\u心跳\u周期=*`间隔`*`

控制心跳间隔，如果连接仍然良好，心跳间隔将在没有数据的情况下停止连接超时。在该秒数之后，心跳信号被发送到复制副本，并且每当源的二进制日志被事件更新时，等待时间被重置。因此，只有在二进制日志文件中没有超过此时间段的未发送事件时，源才会发送心跳。

心跳间隔*`间隔`*是一个十进制值，范围为0到4294967秒，分辨率以毫秒为单位；最小的非零值为0.001。背景*`间隔`*到0将完全禁用心跳。心跳间隔默认为[`副本\u网络\u超时`](replication-options-replica.html#sysvar_replica_net_timeout)或[`从网络超时`](replication-options-replica.html#sysvar_slave_net_timeout)系统变量。它记录在源元数据存储库中，并显示在[`复制\连接\配置`](performance-schema-replication-connection-configuration-table.html)性能模式表。发行[`重置副本`](reset-replica.html)将心跳间隔重置为默认值。

系统变量[`副本\u网络\u超时`](replication-options-replica.html#sysvar_replica_net_timeout)（来自MySQL 8.0.26）或[`从网络超时`](replication-options-replica.html#sysvar_slave_net_timeout)（MySQL 8.0.26之前）指定复制副本在认为连接已断开、中止读取并尝试重新连接之前等待更多数据或来自源的心跳信号的秒数。默认值为60秒（一分钟）。请注意，对的值或默认设置的更改[`副本\u网络\u超时`](replication-options-replica.html#sysvar_replica_net_timeout)或[`从网络超时`](replication-options-replica.html#sysvar_slave_net_timeout)不会自动更改心跳间隔，无论是显式设置还是使用之前计算的默认值。如果设置了的全局值，则会发出警告[`副本\u网络\u超时`](replication-options-replica.html#sysvar_replica_net_timeout)或`从网络超时`设置为小于当前心跳间隔的值。如果[`副本\u网络\u超时`](replication-options-replica.html#sysvar_replica_net_timeout)或[`从网络超时`](replication-options-replica.html#sysvar_slave_net_timeout)如果更改了，您还必须发布[`将复制源更改为`](change-replication-source-to.html)将心跳间隔调整为适当的值，以便心跳信号在连接超时之前出现。如果不这样做，心跳信号将不起作用，如果没有从源接收到数据，复制副本可以重复尝试重新连接，从而创建僵尸转储线程。

`来源(u主机)*`主机名`*'`

复制源服务器的主机名或IP地址。复制副本使用此连接到源。字符串值的最大长度为255个字符。

如果你指定`源主机`或`源端口`，复制副本假定源服务器与以前不同（即使选项值与其当前值相同）在这种情况下，源的二进制日志文件名和位置的旧值被认为不再适用，因此如果不指定`源日志文件`和`来源_日志_位置`在声明中，`源日志文件=“”`和`来源_日志_位置=4`都默默地附在它后面。

背景`SOURCE_HOST=''`（也就是说，将其值显式设置为空字符串）是*不*与不设置相同`源主机`完全试图设置`源主机`删除空字符串失败，并出现错误。

`来源\u日志\u文件=*`源\\日志\\名称`*'`, `来源_日志_位置=*`来源\_日志\_位置`*`

二进制日志文件名，以及该文件中的位置，在该位置，复制I/O（接收器）线程在下次线程启动时开始从源的二进制日志中读取数据。如果使用基于二进制日志文件位置的复制，请指定这些选项。

`源日志文件`必须包含源服务器上可用的特定二进制日志文件的数字后缀，例如，`SOURCE_LOG_FILE='binlog。000145'`。字符串值的最大长度为511个字符。

`来源_日志_位置`复制副本在该文件中开始读取的数字位置。`来源_日志_位置=4`表示二进制日志文件中事件的开始。

如果您指定`源日志文件`或`来源_日志_位置`，您不能指定`SOURCE_AUTO_POSITION=1`，用于基于GTID的复制。

如果两人都`源日志文件`或`来源_日志_位置`指定时，复制副本将使用*复制SQL线程*之前`将复制源更改为`发布了。这确保了复制中没有中断，即使复制SQL（applier）线程比复制I/O（接收器）线程晚。

`来源*`暗语`*'`

用于连接到复制源服务器的复制用户帐户的密码。字符串值的最大长度为32个字符。如果你指定`源密码`, `源用户`这也是必须的。

中用于复制用户帐户的密码`将复制源更改为`语句的长度限制为32个字符。试图使用超过32个字符的密码会导致`将复制源更改为`失败。

密码在MySQL服务器的日志、性能模式表和[`显示进程列表`](show-processlist.html)声明。

`源端口=*`港口号`*`

复制副本用于连接到复制源服务器的TCP/IP端口号。

笔记

复制无法使用Unix套接字文件。您必须能够使用TCP/IP连接到复制源服务器。

如果你指定`源主机`或`源端口`，复制副本假定源服务器与以前不同（即使选项值与其当前值相同）在这种情况下，源的二进制日志文件名和位置的旧值被认为不再适用，因此如果不指定`源日志文件`和`来源_日志_位置`在声明中，`源日志文件=“”`和`来源_日志_位置=4`都默默地附在它后面。

`来源\u公共\u密钥\u路径=*`密钥文件名`*'`

通过提供包含源所需公钥的副本端副本的文件的路径名，启用基于RSA密钥对的密码交换。该文件必须为PEM格式。字符串值的最大长度为511个字符。

此选项适用于通过`shau密码`或`缓存_sha2_密码`身份验证插件。（用于`shau密码`, `源\公共\密钥\路径`只有在使用OpenSSL构建MySQL时才能使用。）如果您使用的复制用户帐户通过`缓存_sha2_密码`插件（这是MySQL 8.0的默认设置），如果您没有使用安全连接，则必须指定此选项或`GET_SOURCE_PUBLIC_KEY=1`为复制副本提供RSA公钥的选项。

`源\重试\计数=*`计数`*`

设置复制副本在与源的连接超时后尝试重新连接的最大次数，由[`副本\u网络\u超时`](replication-options-replica.html#sysvar_replica_net_timeout)或[`从网络超时`](replication-options-replica.html#sysvar_slave_net_timeout)系统变量。如果复制副本确实需要重新连接，则第一次重试将在超时后立即进行。默认值为86400次尝试。

尝试之间的间隔由`源\连接\重试`选项如果使用了这两种默认设置，则复制副本会在重新连接尝试之间等待60秒(`SOURCE_CONNECT_RETRY=60`)，并一直尝试以这种速度重新连接60天(`来源_重试_计数=86400`).设置为0表示`来源_重试_计数`这意味着重新连接尝试的次数没有限制，因此复制副本会一直尝试无限期地重新连接。

价值观`源\连接\重试`和`来源_重试_计数`记录在源元数据存储库中，并显示在[`复制\连接\配置`](performance-schema-replication-connection-configuration-table.html)性能模式表。`来源_重试_计数`取代[`--主重试计数`](replication-options-replica.html#option_mysqld_master-retry-count)服务器启动选项。

`SOURCE_SSL={0 | 1}`

指定复制副本是否加密复制连接。默认值为0，这意味着复制副本不加密复制连接。如果你设定`SOURCE_SSL=1`，您可以使用`来源：SSL_*`xxx`*`和`来源_TLS_*`xxx`*`选项。

背景`SOURCE_SSL=1`用于复制连接，然后不再设置`来源：SSL_*`xxx`*`选项对应于设置`--ssl模式=必需`如中所述[用于加密连接的命令选项](connection-options.html#encrypted-connection-options)具有`SOURCE_SSL=1`，只有在可以建立加密连接的情况下，连接尝试才会成功。复制连接不会退回到未加密的连接，因此没有与`--ssl模式=首选`复制的设置。如果`SOURCE_SSL=0`已设置，这对应于`--ssl模式=禁用`.

`来源：SSL_*`xxx`*`, `来源_TLS_*`xxx`*`

指定复制副本如何使用加密和密码来保护复制连接。即使在不支持SSL的情况下编译副本，也可以更改这些选项。它们会保存到源元数据存储库中，但如果复制副本未启用SSL支持，则会被忽略。值为的字符串的值的最大长度`来源：SSL_*`xxx`*`和`来源_TLS_*`xxx`*`选项为511个字符，但`源代码\u TLS\u密码套件`，其长度为4000个字符。

这个`来源：SSL_*`xxx`*`和`来源_TLS_*`xxx`*`选项执行的功能与`--ssl-*`xxx`*`和`--tls-*`xxx`*`中描述的客户端选项[用于加密连接的命令选项](connection-options.html#encrypted-connection-options).两组选项之间的对应关系，以及`来源：SSL_*`xxx`*`和`来源_TLS_*`xxx`*`中介绍了设置安全连接的选项[第17.3.1节，“设置复制以使用加密连接”](replication-solutions-encrypted-connections.html).

`来源(u用户)*`用户名`*'`

用于连接到复制源服务器的复制用户帐户的用户名。字符串值的最大长度为96个字符。

对于组复制，复制组的每个成员上都必须存在此帐户。如果XCom通信堆栈用于组，则用于分布式恢复；如果MySQL通信堆栈用于组，则用于组通信连接。使用MySQL通信堆栈时，帐户必须具有[`组\u复制\u流`](privileges-provided.html#priv_group-replication-stream)准许

可以通过指定`源用户=“”`，但无法使用空用户名启动复制通道。在MySQL 8.0.21之前的版本中，仅将`源用户`用户名（如果出于安全目的需要从复制元数据存储库中清除以前使用的凭据）。由于这些版本中存在漏洞，如果从存储库中读取空用户名（例如，在自动重新启动组复制通道期间），则可能会替换默认用户名，因此以后不要使用该通道。在MySQL 8.0.21中，设置空`源用户`如果始终使用[`开始复制`](start-replica.html)声明或[`启动组复制`](start-group-replication.html)启动复制通道的语句。这种方法意味着复制通道总是需要操作员干预才能重新启动，但用户凭据不会记录在复制元数据存储库中。

重要的

使用通过验证的复制用户帐户连接到源`缓存_sha2_密码`插件，则必须按照中所述设置安全连接[第17.3.1节，“设置复制以使用加密连接”](replication-solutions-encrypted-connections.html)，或启用未加密连接以支持使用RSA密钥对进行密码交换。这个`缓存_sha2_密码`身份验证插件是MySQL 8.0创建的新用户的默认插件（有关详细信息，请参阅[第6.4.1.2节，“缓存SHA-2可插拔身份验证”](caching-sha2-pluggable-authentication.html))。如果您创建或用于复制的用户帐户使用此身份验证插件，而您没有使用安全连接，则必须启用基于RSA密钥对的密码交换才能成功连接。您可以使用`源\公共\密钥\路径`选项还是`GET_SOURCE_PUBLIC_KEY=1`此声明的选项。

`源_ZSTD_压缩_级别=*`数量`*`

用于连接到使用的复制源服务器的压缩级别`zstd`压缩算法。`源_ZSTD_压缩_级别`从MySQL 8.0.18开始提供。允许的水平从1到22，较大的值表示压缩水平增加。默认级别为3。

压缩级别设置对不使用压缩级别的连接没有影响`zstd`压缩。有关更多信息，请参阅[第4.2.8节，“连接压缩控制”](connection-compression-control.html).

##### 例子

[`将复制源更改为`](change-replication-source-to.html)当您拥有源的快照并记录了与快照时间相对应的源的二进制日志坐标时，对于设置副本非常有用。将快照加载到复制副本以与源同步后，可以运行`将复制源更改为源日志文件*`日志名称`*，来源_LOG_POS=*`日志位置`*`在复制副本上指定复制副本开始读取源二进制日志的坐标。以下示例更改复制副本使用的源服务器，并建立复制副本开始读取的源二进制日志坐标：

```
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='source2.example.com',
  SOURCE_USER='replication',
  SOURCE_PASSWORD='password',
  SOURCE_PORT=3306,
  SOURCE_LOG_FILE='source2-bin.001',
  SOURCE_LOG_POS=4,
  SOURCE_CONNECT_RETRY=10;
```

有关在故障切换期间将现有复制副本切换到新源的过程，请参阅[第17.4.8节，“故障切换期间切换源”](replication-solutions-switch.html).

在源和副本上使用GTID时，请指定GTID自动定位，而不是给定二进制日志文件的位置，如以下示例所示。有关在新的或已停止的服务器、在线服务器或其他副本上配置和启动基于GTID的复制的完整说明，请参阅[第17.1.3节，“使用全局事务标识符的复制”](replication-gtids.html).

```
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='source3.example.com',
  SOURCE_USER='replication',
  SOURCE_PASSWORD='password',
  SOURCE_PORT=3306,
  SOURCE_AUTO_POSITION = 1,
  FOR CHANNEL "source_3";
```

在本例中，使用了多源复制，并且[`将复制源更改为`](change-replication-source-to.html)语句应用于复制通道`“来源3”`将复制副本连接到指定主机的。有关设置多源复制的指导，请参阅[第17.1.5节，“MySQL多源复制”](replication-multi-source.html).

下一个示例显示了如何从要重复的中继日志文件中应用复制副本事务。要做到这一点，不需要访问源。你可以用[`将复制源更改为`](change-replication-source-to.html)要找到希望复制副本开始重新应用事务的中继日志位置，然后启动SQL线程，请执行以下操作：

```
CHANGE REPLICATION SOURCE TO
  RELAY_LOG_FILE='replica-relay-bin.006',
  RELAY_LOG_POS=4025;
START REPLICA SQL_THREAD;
```

[`将复制源更改为`](change-replication-source-to.html)还可以用于跳过二进制日志中导致复制停止的事务。执行此操作的适当方法取决于GTID是否正在使用。有关跳过事务的说明，请使用[`将复制源更改为`](change-replication-source-to.html)或者另一种方法，参见[第17.1.7.3节“跳过交易”](replication-administration-skip.html).
