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
更改副本服务器用于连接到源和从源读取数据的参数。它还更新复制元数据存储库的内容(请参阅第 17.2.4 节,“中继日志和复制元数据存储库”)。在 MySQL 8.0.23 及更高版本中,使用CHANGE REPLICATION
SOURCE TO
代替已弃用的
CHANGE MASTER TO
语句。
CHANGE REPLICATION SOURCE TO
需要
REPLICATION_SLAVE_ADMIN
特权(或已弃用的SUPER
特权)。
您未在CHANGE
REPLICATION SOURCE TO
语句中指定的选项保留其值,除非在以下讨论中指出。因此,在大多数情况下,无需指定不会更改的选项。
检查用于SOURCE_HOST
和其他
CHANGE REPLICATION SOURCE TO
选项的值是否有换行符(\n
或
0x0A
)。这些值中存在此类字符会导致语句失败并出现错误。
可选子句使您能够命名该语句适用于哪个复制通道。提供一个子句将
语句应用于特定的复制通道,并用于添加新通道或修改现有通道。例如,要添加一个名为的新频道:
FOR CHANNEL
channel
FOR CHANNEL
channel
CHANGE REPLICATION SOURCE TO
channel2
CHANGE REPLICATION SOURCE TO SOURCE_HOST=host1, SOURCE_PORT=3002 FOR CHANNEL 'channel2';
如果没有命名子句并且不存在额外的通道,
CHANGE REPLICATION SOURCE TO
则声明适用于默认通道,其名称为空字符串 ("")。当您设置了多个复制通道时,每个CHANGE REPLICATION SOURCE
TO
语句都必须使用该
子句命名一个通道。有关更多信息,请参阅
第 17.2.2 节,“复制通道”。
FOR CHANNEL
channel
对于CHANGE
REPLICATION SOURCE TO
声明的某些选项,您必须
STOP REPLICA
在发布声明之前发布CHANGE REPLICATION SOURCE
TO
声明(以及START
REPLICA
之后的声明)。有时,您只需要停止复制 SQL(应用程序)线程或复制 I/O(接收方)线程,而不是同时停止:
当应用程序线程停止时,您可以使用 、 和 选项允许的任何组合执行 , 即使
CHANGE REPLICATION SOURCE TO
复制 接收器线程正在运行。当接收器线程运行时,此语句不能使用其他选项。RELAY_LOG_FILE
RELAY_LOG_POS
SOURCE_DELAY
当接收器线程停止时,您可以
CHANGE REPLICATION SOURCE TO
使用此语句的任何选项(在任何允许的组合中)执行,除了RELAY_LOG_FILE
、RELAY_LOG_POS
、SOURCE_DELAY
,SOURCE_AUTO_POSITION = 1
甚至当应用程序线程正在运行时。在发出使用、 或 的
CHANGE REPLICATION SOURCE TO
语句 之前,必须停止接收线程和应用程序线程。SOURCE_AUTO_POSITION = 1
GTID_ONLY = 1
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
您可以使用检查复制应用程序线程和复制接收器线程的当前状态
SHOW
REPLICA STATUS
。请注意,Group Replication applier channel ( group_replication_applier
) 没有接收线程,只有一个 applier 线程。
CHANGE REPLICATION SOURCE TO
语句有许多您应该事先了解的副作用和相互作用:
CHANGE REPLICATION SOURCE TO
导致正在进行的事务的隐式提交。请参阅 第 13.3.3 节,“导致隐式提交的语句”。CHANGE REPLICATION SOURCE TO
SOURCE_HOST
导致、SOURCE_PORT
、SOURCE_LOG_FILE
和 的先前值SOURCE_LOG_POS
连同有关执行前副本状态的其他信息一起写入错误日志。如果您使用基于语句的复制和临时表,则
CHANGE REPLICATION SOURCE TO
语句后的STOP REPLICA
语句可能会在副本上留下临时表。ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO
每当发生这种情况时,都会发出警告 ( )。在这种情况下,您可以通过确保 在执行此类语句 之前Replica_open_temp_tables
orSlave_open_temp_tables
系统状态变量的值等于 0来避免这种情况。CHANGE REPLICATION SOURCE TO
使用多线程副本 (
replica_parallel_workers
> 0 ) 时,停止副本可能会导致从中继日志执行的事务序列出现间隙,无论副本是有意还是其他方式停止。当存在这种差距时,发行CHANGE REPLICATION SOURCE TO
就会失败。在这种情况下的解决方案是发出START REPLICA UNTIL SQL_AFTER_MTS_GAPS
确保差距被关闭的问题。从 MySQL 8.0.26 开始,当使用基于 GTID 的复制和 GTID 自动定位时,检查事务序列中的间隙的过程被完全跳过,因为事务中的间隙可以使用 GTID 自动定位来解决。在那种情况下,CHANGE REPLICATION SOURCE TO
仍然可以使用。
以下选项可用于
CHANGE REPLICATION SOURCE TO
语句:
-
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL |
uuid
} 使复制通道为没有 GTID 的复制事务分配一个 GTID,从而实现从不使用基于 GTID 的复制的源到使用的副本的复制。对于多源副本,您可以混合使用
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
和不使用 的通道。默认值为OFF
,表示不使用该功能。LOCAL
分配一个 GTID,包括副本自己的 UUID(server_uuid
设置)。
分配一个 GTID,包括指定的 UUID,例如uuid
server_uuid
复制源服务器的设置。使用非本地 UUID 可以区分起源于副本的事务和起源于源的事务,对于多源副本,可以区分起源于不同源的事务。您选择的 UUID 仅对副本自己的使用有意义。如果源发送的任何事务确实已经具有 GTID,则保留该 GTID。特定于 Group Replication 的通道不能使用
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
,但作为 Group Replication 组成员的服务器实例上另一个源的异步复制通道可以这样做。在这种情况下,请勿将组复制组名称指定为用于创建 GTID 的 UUID。要设置
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
为LOCAL
或
,副本必须已uuid
gtid_mode=ON
设置,并且此后无法更改。此选项用于具有基于二进制日志文件位置的复制的源,因此MASTER_AUTO_POSITION=1
不能为通道设置。在设置此选项之前,复制 SQL 线程和复制 I/O(接收方)线程都必须停止。重要的在需要故障转移的情况下,不能提升在任何通道上设置的副本
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
以替换复制源服务器,并且从副本获取的备份不能用于恢复复制源服务器。ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
同样的限制适用于替换或恢复在任何通道上 使用的其他副本 。有关更多限制和信息,请参阅 第 17.1.3.6 节,“从没有 GTID 的源复制到具有 GTID 的副本”。
-
GET_SOURCE_PUBLIC_KEY = {0|1}
通过从源请求公钥启用基于 RSA 密钥对的密码交换。默认情况下禁用该选项。
此选项适用于使用
caching_sha2_password
身份验证插件进行身份验证的副本。对于使用此插件进行身份验证的帐户的连接,除非请求,否则源不会发送公钥,因此必须在客户端中请求或指定。如果SOURCE_PUBLIC_KEY_PATH
给出并指定一个有效的公钥文件,它优先于GET_SOURCE_PUBLIC_KEY
. 如果您使用的是通过插件进行身份验证的复制用户帐户caching_sha2_password
(这是 MySQL 8.0 的默认设置),并且您没有使用安全连接,则必须指定此选项或SOURCE_PUBLIC_KEY_PATH
向副本提供 RSA 公钥的选项。-
GTID_ONLY = {0|1}
停止复制通道在复制元数据存储库中保留文件名和文件位置。
GTID_ONLY
从 MySQL 8.0.27 开始可用。异步复制通道默认禁用该GTID_ONLY
选项,但组复制通道默认启用该选项,并且无法为它们禁用。对于具有此设置的复制通道,仍然会跟踪内存中的文件位置,并且仍然可以在错误消息中和通过
SHOW REPLICA STATUS
语句之类的界面(如果它们已过时,则显示为无效)出于调试目的观察文件位置. 但是,在基于 GTID 的复制实际上不需要它们的情况下,包括事务排队和应用程序进程,避免了持久化和检查文件位置所需的写入和读取。仅当复制 SQL(应用程序)线程和复制 I/O(接收方)线程都停止时,才能使用此选项。要设置
GTID_ONLY = 1
复制通道,GTID 必须在服务器 (gtid_mode = ON
) 上使用,并且基于行的二进制日志记录必须在源上使用(不支持基于语句的复制)。必须为复制通道设置 选项REQUIRE_ROW_FORMAT = 1
和。SOURCE_AUTO_POSITION = 1
设置时,如果服务器的系统变量设置为零
GTID_ONLY = 1
,则副本使用replica_parallel_workers=1
,因此从技术上讲,它始终是多线程应用程序。这是因为多线程应用程序使用保存的位置而不是复制元数据存储库来定位它需要重新应用的事务的开始。如果
GTID_ONLY
在设置后禁用,现有的中继日志将被删除,现有的已知二进制日志文件位置将被保留,即使它们是陈旧的。复制元数据存储库中二进制日志和中继日志的文件位置可能无效,如果是这种情况,将返回警告。如果SOURCE_AUTO_POSITION
仍然启用,GTID 自动定位用于提供正确的定位。如果您还禁用
SOURCE_AUTO_POSITION
,则复制元数据存储库中二进制日志和中继日志的文件位置如果有效,将用于定位。如果它们被标记为无效,您必须提供有效的二进制日志文件名和位置(SOURCE_LOG_FILE
和SOURCE_LOG_POS
)。如果您还提供中继日志文件名和位置(RELAY_LOG_FILE
和RELAY_LOG_POS
),中继日志将被保留,应用程序位置将设置为指定位置。GTID 自动跳过确保跳过任何已应用的事务,即使最终应用程序位置不正确也是如此。-
IGNORE_SERVER_IDS = (
server_id_list
) 使副本忽略来自指定服务器的事件。该选项采用逗号分隔的 0 个或多个服务器 ID 列表。来自服务器的日志轮换和删除事件不会被忽略,并记录在中继日志中。
在循环复制中,原始服务器通常充当其自身事件的终结者,因此它们不会被多次应用。因此,当循环中的一台服务器被删除时,此选项在循环复制中很有用。假设您有一个包含 4 个服务器的循环复制设置,服务器 ID 分别为 1、2、3 和 4,而服务器 3 发生故障。通过开始从服务器 2 到服务器 4 的复制来弥合差距时,您可以
IGNORE_SERVER_IDS = (3)
在CHANGE REPLICATION SOURCE TO
您在服务器 4 上发出的语句,告诉它使用服务器 2 而不是服务器 3 作为其源。这样做会导致它忽略并且不传播源自不再使用的服务器的任何语句。如果
IGNORE_SERVER_IDS
包含服务器自己的 ID 并且服务器是在--replicate-same-server-id
启用该选项的情况下启动的,则会产生错误。笔记当全局事务标识符 (GTID) 用于复制时,已经应用的事务将被自动忽略,因此该
IGNORE_SERVER_IDS
功能不是必需的,已被弃用。如果 为服务器设置了 ,如果您在语句 中包含该选项,gtid_mode=ON
则会发出弃用警告。IGNORE_SERVER_IDS
CHANGE REPLICATION SOURCE TO
源元数据存储库和输出
SHOW REPLICA STATUS
提供了当前被忽略的服务器列表。有关详细信息,请参阅 第 17.2.4.2 节,“复制元数据存储库”和 第 13.7.7.35 节,“SHOW REPLICA STATUS 语句”。如果
CHANGE REPLICATION SOURCE TO
发出的语句没有任何IGNORE_SERVER_IDS
选项,则保留任何现有列表。要清除忽略的服务器列表,必须使用带有空列表的选项:CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = ();
RESET REPLICA ALL
清除IGNORE_SERVER_IDS
。笔记SET GTID_MODE=ON
如果在任何通道的现有服务器 ID 设置为 时 发出 ,则会发出 弃用警告IGNORE_SERVER_IDS
。在开始基于 GTID 的复制之前,检查并清除所涉及服务器上所有忽略的服务器 ID 列表。该SHOW REPLICA STATUS
语句显示忽略的 ID 列表(如果有的话)。如果确实收到弃用警告,您仍然可以在gtid_mode=ON
设置后通过发出包含带有空列表CHANGE REPLICATION SOURCE TO
的选项的语句 来清除列表。IGNORE_SERVER_IDS
-
NETWORK_NAMESPACE = '
namespace
' 用于到复制源服务器的 TCP/IP 连接的网络名称空间,或者,如果正在使用 MySQL 通信堆栈,则用于组复制的组通信连接。字符串值的最大长度为 64 个字符。如果省略此选项,则来自副本的连接将使用默认(全局)命名空间。在不实现网络命名空间支持的平台上,当副本尝试连接到源时会失败。有关网络命名空间的信息,请参阅 第 5.1.14 节,“网络命名空间支持”。
NETWORK_NAMESPACE
从 MySQL 8.0.22 开始可用。-
PRIVILEGE_CHECKS_USER = {NULL | '
account
'} 命名为指定通道提供安全上下文的用户帐户。
NULL
,这是默认值,表示不使用安全上下文。PRIVILEGE_CHECKS_USER
从 MySQL 8.0.18 开始可用。用户帐户的用户名和主机名必须遵循 第 6.2.4 节“指定帐户名”中描述的语法,并且用户不能是匿名用户(用户名为空)或
CURRENT_USER
. 该帐户必须具有REPLICATION_APPLIER
特权,以及执行在通道上复制的交易所需的特权。有关帐户所需权限的详细信息,请参阅 第 17.3.3 节,“复制权限检查”. 当您重新启动复制通道时,将从那时起应用权限检查。如果您未指定通道且不存在其他通道,则该语句将应用于默认通道。强烈建议在
PRIVILEGE_CHECKS_USER
设置时使用基于行的二进制日志记录,并且您可以设置REQUIRE_ROW_FORMAT
为强制执行此操作。例如,要channel_1
在正在运行的副本上的通道上启动权限检查,请发出以下语句:STOP REPLICA FOR CHANNEL 'channel_1'; CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER = 'user'@'host', REQUIRE_ROW_FORMAT = 1, FOR CHANNEL 'channel_1'; START REPLICA FOR CHANNEL 'channel_1';
-
RELAY_LOG_FILE = '
,relay_log_file
'RELAY_LOG_POS = '
relay_log_pos
' 中继日志文件名,以及该文件中的位置,复制 SQL 线程在下次线程启动时开始从副本的中继日志读取。
RELAY_LOG_FILE
可以使用绝对路径或相对路径,并使用与SOURCE_LOG_FILE
. 字符串值的最大长度为 511 个字符。当复制 SQL(应用程序)线程停止时,可以在正在运行的副本上执行使用 、 或这两个选项的 语句
CHANGE REPLICATION SOURCE TO
。如果复制应用程序线程和复制 I/O(接收方)线程中的至少一个正在运行,则会保留中继日志。如果两个线程都停止,则删除所有中继日志文件,除非至少指定了 或之一。对于组复制应用程序通道(RELAY_LOG_FILE
RELAY_LOG_POS
RELAY_LOG_FILE
RELAY_LOG_POS
group_replication_applier
),它只有一个应用程序线程而没有接收程序线程,如果应用程序线程停止,就会出现这种情况,但是对于该通道,您不能使用RELAY_LOG_FILE
和RELAY_LOG_POS
选项。-
REQUIRE_ROW_FORMAT = {0|1}
仅允许复制通道处理基于行的复制事件。此选项可防止复制应用程序执行创建临时表和执行
LOAD DATA INFILE
请求等操作,从而提高通道的安全性。异步复制通道默认禁用该REQUIRE_ROW_FORMAT
选项,但组复制通道默认启用该选项,并且无法为它们禁用。有关详细信息,请参阅 第 17.3.3 节,“复制权限检查”。REQUIRE_ROW_FORMAT
从 MySQL 8.0.19 开始可用。-
REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF}
使副本能够选择自己的主键检查策略。默认值为
STREAM
。REQUIRE_TABLE_PRIMARY_KEY_CHECK
从 MySQL 8.0.20 开始可用。当该选项设置为
ON
用于复制通道时,副本始终在复制操作中使用系统变量的值ON
,sql_require_primary_key
需要主键。当该选项设置为OFF
时,副本始终在复制操作中使用该值OFF
,sql_require_primary_key
因此永远不需要主键,即使源需要一个也是如此。当该REQUIRE_TABLE_PRIMARY_KEY_CHECK
选项设置为STREAM
默认值时,副本使用从每个事务的源复制的任何值。对于多源复制,设置
REQUIRE_TABLE_PRIMARY_KEY_CHECK
或ON
启用OFF
副本以规范不同源的复制通道的行为,并保持sql_require_primary_key
系统变量的一致设置。ON
当多个源更新同一组表时,使用保护措施防止意外丢失主键。UsingOFF
允许可以操纵主键的源与不能操纵主键的源一起工作。设置时
PRIVILEGE_CHECKS_USER
,设置REQUIRE_TABLE_PRIMARY_KEY_CHECK
为ON
或OFF
意味着用户帐户不需要会话管理级别权限来设置受限会话变量,这些变量需要更改值sql_require_primary_key
以匹配每个事务的源设置。有关详细信息,请参阅 第 17.3.3 节,“复制权限检查”。-
SOURCE_AUTO_POSITION = {0|1}
使副本尝试使用基于 GTID 的复制的自动定位功能连接到源,而不是基于二进制日志文件的位置。此选项用于使用基于 GTID 的复制来启动副本。默认为 0,表示不使用 GTID 自动定位和基于 GTID 的复制。
CHANGE REPLICATION SOURCE TO
仅当复制 SQL(应用程序)线程和复制 I/O(接收方)线程都停止 时,才能使用此选项。副本和源都必须启用 GTID(
GTID_MODE=ON
,ON_PERMISSIVE,
或OFF_PERMISSIVE
在副本和GTID_MODE=ON
源上)。SOURCE_LOG_FILE
,SOURCE_LOG_POS
,RELAY_LOG_FILE
, 和RELAY_LOG_POS
不能与 一起指定SOURCE_AUTO_POSITION = 1
。如果在副本上启用了多源复制,则需要SOURCE_AUTO_POSITION = 1
为每个适用的复制通道设置选项。和
SOURCE_AUTO_POSITION = 1
设置,在初始连接握手中,副本发送一个 GTID 集,其中包含它已经接收、提交或两者都包含的事务。源通过发送记录在其二进制日志中的所有事务来响应,这些事务的 GTID 不包含在副本发送的 GTID 集中。此交换确保源仅发送具有副本尚未记录或提交的 GTID 的事务。如果副本从多个来源接收交易,如在菱形拓扑的情况下,自动跳过功能确保交易不会被应用两次。副本发送的GTID集是如何计算的,详见 第 17.1.3.3 节,“GTID 自动定位”。如果应由源发送的任何事务已从源的二进制日志中清除,或已
gtid_purged
通过其他方法添加到系统变量中的 GTID 集,则源将错误发送ER_MASTER_HAS_PURGED_REQUIRED_GTIDS
到副本,并且复制不会开始. 丢失的清除事务的 GTID 被识别并列在警告消息中的源错误日志中ER_FOUND_MISSING_GTIDS
. 此外,如果在事务交换期间发现副本已记录或提交了 GTID 中源的 UUID 的事务,但源本身尚未提交它们,则源将错误发送ER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER
到副本并且复制不会启动。有关如何处理这些情况的信息,请参阅 第 17.1.3.3 节,“GTID 自动定位”。replication_connection_status
您可以通过检查 Performance Schema表或 的输出 来查看复制是否在启用 GTID 自动定位的情况下运行SHOW REPLICA STATUS
。再次禁用该SOURCE_AUTO_POSITION
选项会使副本恢复为基于文件的复制。-
SOURCE_BIND = '
interface_name
' 确定选择哪个副本的网络接口来连接到源,以用于具有多个网络接口的副本。指定网络接口的 IP 地址。字符串值的最大长度为 255 个字符。
使用此选项配置的 IP 地址(如果有)可以在
Source_Bind
输出的列中 看到SHOW REPLICA STATUS
。在源元数据存储库表中mysql.slave_master_info
,值可以看作Source_bind
列。NDB Cluster 还支持将副本绑定到特定网络接口的能力。-
SOURCE_COMPRESSION_ALGORITHMS = '
algorithm
[,algorithm
][,algorithm
]' 为复制源服务器的连接指定一种、两种或三种允许的压缩算法,以逗号分隔。字符串值的最大长度为 99 个字符。默认值为
uncompressed
。可用的算法是
zlib
、zstd
和uncompressed
,与protocol_compression_algorithms
系统变量相同。可以按任何顺序指定算法,但它不是优先顺序 - 如果指定了算法协商过程,则会尝试使用zlib
, thenzstd
, thenuncompressed
。SOURCE_COMPRESSION_ALGORITHMS
从 MySQL 8.0.18 开始可用。的值
SOURCE_COMPRESSION_ALGORITHMS
仅在replica_compressed_protocol
或slave_compressed_protocol
系统变量被禁用时适用。如果 启用replica_compressed_protocol
或 , 如果源和副本都支持该算法slave_compressed_protocol
,则它优先于SOURCE_COMPRESSION_ALGORITHMS
并且与源的连接使用压缩。zlib
有关更多信息,请参阅 第 4.2.8 节,“连接压缩控制”。由系统变量激活的二进制日志事务压缩(自 MySQL 8.0.20 起可用)
binlog_transaction_compression
也可用于节省带宽。如果结合连接压缩执行此操作,则连接压缩对数据起作用的机会较少,但仍可以压缩标头以及那些未压缩的事件和事务有效负载。有关二进制日志事务压缩的更多信息,请参阅 第 5.4.4.5 节,“二进制日志事务压缩”。-
SOURCE_CONNECT_RETRY =
interval
指定在与源的连接超时后副本进行的重新连接尝试之间的间隔(以秒为单位)。默认间隔为 60。
尝试次数受
SOURCE_RETRY_COUNT
选项限制。如果使用这两种默认设置,副本将在重新连接尝试之间等待 60 秒 (SOURCE_CONNECT_RETRY=60
),并在 60 天内继续尝试以此速率重新连接 (SOURCE_RETRY_COUNT=86400
)。这些值记录在源元数据存储库中,并显示在replication_connection_configuration
性能模式表中。-
SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}
如果一个或多个备用复制源服务器可用(因此当有多个 MySQL 服务器或服务器组共享复制数据时),激活复制通道的异步连接故障转移机制。
SOURCE_CONNECTION_AUTO_FAILOVER
从 MySQL 8.0.22 开始可用。默认值为 0,表示该机制未激活。有关设置此功能的完整信息和说明,请参阅 第 17.4.9.2 节,“副本的异步连接故障转移”。SOURCE_CONNECT_RETRY
在由和 控制的重新连接尝试SOURCE_RETRY_COUNT
耗尽 后,异步连接故障转移机制接管 。它将副本重新连接到从指定源列表中选择的替代源,您可以使用asynchronous_connection_failover_add_source
和asynchronous_connection_failover_delete_source
函数管理该列表。要添加和删除托管服务器组,请改用asynchronous_connection_failover_add_managed
和asynchronous_connection_failover_delete_managed
函数。有关详细信息,请参阅 第 17.4.9 节,“使用异步连接故障转移切换源和副本”。重要的您只能
SOURCE_CONNECTION_AUTO_FAILOVER = 1
在使用 GTID 自动定位时设置(SOURCE_AUTO_POSITION = 1
)。当您设置 时
SOURCE_CONNECTION_AUTO_FAILOVER = 1
,将SOURCE_RETRY_COUNT
和 设置SOURCE_CONNECT_RETRY
为仅允许对同一源进行几次重试的最小数字,以防连接失败是由瞬态网络中断引起的。否则异步连接故障转移机制不能及时启动。合适的值是SOURCE_RETRY_COUNT=3
和SOURCE_CONNECT_RETRY=10
,这使得副本以 10 秒的间隔重试连接 3 次。当您设置
SOURCE_CONNECTION_AUTO_FAILOVER = 1
时,复制元数据存储库必须包含复制用户帐户的凭据,该帐户可用于连接到复制通道的源列表中的所有服务器。该帐户还必须SELECT
对 Performance Schema 表具有权限。可以使用带有和 选项的CHANGE REPLICATION SOURCE TO
语句 来设置这些凭据。有关详细信息,请参阅 第 17.4.9 节,“使用异步连接故障转移切换源和副本”。SOURCE_USER
SOURCE_PASSWORD
从 MySQL 8.0.27 开始,当你设置
SOURCE_CONNECTION_AUTO_FAILOVER = 1
,如果此复制通道在单主模式下的组中的组复制主上,则会自动激活副本的异步连接故障转移。With this function active, if the primary that is replicating goes offline or into an error state, the new primary starts replication on the same channel when it is elected. 如果要使用该功能,还必须在复制组中的所有辅助服务器以及任何新加入的成员上设置此复制通道。(如果使用 MySQL 的克隆功能配置服务器,这一切都会自动发生。group_replication_disable_member_action
函数禁用 Group Replication member actionmysql_start_failover_channels_if_primary
,默认情况下启用。有关详细信息,请参阅 第 17.4.9.2 节,“副本的异步连接故障转移”。
-
SOURCE_DELAY =
interval
指定副本必须落后于源多少秒。从源接收到的事件至少
interval
比它在源上的执行晚几秒才执行。interval
必须是 0 到 2 31 −1 范围内的非负整数。默认值为 0。有关更多信息,请参阅 第 17.4.11 节,“延迟复制”。当复制 SQL 线程停止时,可以在正在运行的副本上执行使用该选项 的
CHANGE REPLICATION SOURCE TO
语句。SOURCE_DELAY
-
SOURCE_HEARTBEAT_PERIOD =
interval
控制心跳间隔,如果连接仍然良好,它会停止在没有数据的情况下发生的连接超时。在该秒数后,心跳信号将发送到副本,并且只要源的二进制日志更新了事件,等待时间就会重置。因此,仅当二进制日志文件中没有未发送的事件的时间长于此时间时,源才会发送心跳。
心跳间隔
interval
是一个十进制值,取值范围为0到4294967秒,单位为毫秒;最小的非零值是 0.001。设置interval
为 0 将完全禁用心跳。replica_net_timeout
心跳间隔默认为orslave_net_timeout
系统变量值的一半 。它记录在源元数据存储库中,并显示在replication_connection_configuration
性能模式表中。发出RESET REPLICA
将心跳间隔重置为默认值。系统变量
replica_net_timeout
(来自 MySQL 8.0.26)或slave_net_timeout
(在 MySQL 8.0.26 之前)指定副本等待更多数据或来自源的心跳信号的秒数,在副本认为连接断开之前,中止读取,并尝试重新连接。默认值为 60 秒(一分钟)。请注意,更改或的值或默认replica_net_timeout
设置slave_net_timeout
不会自动更改心跳间隔,无论是已明确设置还是使用先前计算的默认值。如果将replica_net_timeout
或 的全局值设置slave_net_timeout
为小于当前心跳间隔的值,则会发出警告。如果replica_net_timeout
或被slave_net_timeout
更改,您还必须发出CHANGE REPLICATION SOURCE TO
将心跳间隔调整为合适的值,使心跳信号发生在连接超时之前。如果你不这样做,心跳信号就没有效果,如果没有从源接收到数据,副本可以重复重新连接尝试,创建僵尸转储线程。-
SOURCE_HOST = '
host_name
' 复制源服务器的主机名或 IP 地址。副本使用它来连接到源。字符串值的最大长度为 255 个字符。
如果您指定
SOURCE_HOST
orSOURCE_PORT
,则副本假定源服务器与以前不同(即使选项值与其当前值相同。)在这种情况下,源的二进制日志文件名和位置的旧值被认为是 no不再适用,因此如果您没有在声明中 指定SOURCE_LOG_FILE
and , 则会默默地附加到它。SOURCE_LOG_POS
SOURCE_LOG_FILE=''
SOURCE_LOG_POS=4
设置
SOURCE_HOST=''
(即,将其值显式设置为空字符串) 与根本不设置SOURCE_HOST
不同。尝试设置SOURCE_HOST
为空字符串失败并出现错误。-
SOURCE_LOG_FILE = '
,source_log_name
'SOURCE_LOG_POS =
source_log_pos
二进制日志文件名和该文件中的位置,复制 I/O(接收方)线程在下次线程启动时从该位置开始从源的二进制日志中读取。如果您使用的是基于二进制日志文件位置的复制,请指定这些选项。
SOURCE_LOG_FILE
必须包含源服务器上可用的特定二进制日志文件的数字后缀,例如,SOURCE_LOG_FILE='binlog.000145'
. 字符串值的最大长度为 511 个字符。SOURCE_LOG_POS
是副本开始读取该文件的数字位置。SOURCE_LOG_POS=4
表示二进制日志文件中事件的开始。如果指定 或 之一
SOURCE_LOG_FILE
,SOURCE_LOG_POS
则不能指定SOURCE_AUTO_POSITION = 1
,这是用于基于 GTID 的复制。如果未指定
SOURCE_LOG_FILE
或SOURCE_LOG_POS
,则副本使用 发布之前 复制 SQL 线程CHANGE REPLICATION SOURCE TO
的最后坐标。这确保了复制没有中断,即使复制 SQL(应用程序)线程比复制 I/O(接收方)线程晚了。-
SOURCE_PASSWORD = '
password
' 用于连接到复制源服务器的复制用户帐户的密码。字符串值的最大长度为 32 个字符。如果指定
SOURCE_PASSWORD
,SOURCE_USER
也是必需的。语句中用于复制用户帐户的密码
CHANGE REPLICATION SOURCE TO
长度限制为 32 个字符。尝试使用超过 32 个字符的密码会导致CHANGE REPLICATION SOURCE TO
失败。密码在 MySQL 服务器的日志、性能模式表和
SHOW PROCESSLIST
语句中被屏蔽。-
SOURCE_PORT =
port_num
副本用于连接到复制源服务器的 TCP/IP 端口号。
笔记复制不能使用 Unix 套接字文件。您必须能够使用 TCP/IP 连接到复制源服务器。
如果您指定
SOURCE_HOST
orSOURCE_PORT
,则副本假定源服务器与以前不同(即使选项值与其当前值相同。)在这种情况下,源的二进制日志文件名和位置的旧值被认为是 no不再适用,因此如果您没有在声明中 指定SOURCE_LOG_FILE
and , 则会默默地附加到它。SOURCE_LOG_POS
SOURCE_LOG_FILE=''
SOURCE_LOG_POS=4
-
SOURCE_PUBLIC_KEY_PATH = '
key_file_name
' 通过向包含源所需公钥的副本端副本的文件提供路径名,启用基于 RSA 密钥对的密码交换。该文件必须是 PEM 格式。字符串值的最大长度为 511 个字符。
此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的副本。(对于sha256_password
,SOURCE_PUBLIC_KEY_PATH
只能在使用 OpenSSL 构建 MySQL 时使用。)如果您使用的是通过caching_sha2_password
插件进行身份验证的复制用户帐户(这是 MySQL 8.0 的默认设置),并且您没有使用安全连接,则必须指定此选项或GET_SOURCE_PUBLIC_KEY=1
向副本提供 RSA 公钥的选项。-
SOURCE_RETRY_COUNT =
count
设置副本在与源的连接超时后进行的最大重新连接尝试次数,由
replica_net_timeout
orslave_net_timeout
系统变量确定。如果副本确实需要重新连接,则第一次重试会在超时后立即发生。默认值为 86400 次尝试。尝试之间的间隔由
SOURCE_CONNECT_RETRY
选项指定。如果使用这两种默认设置,副本将在重新连接尝试之间等待 60 秒 (SOURCE_CONNECT_RETRY=60
),并在 60 天内继续尝试以此速率重新连接 (SOURCE_RETRY_COUNT=86400
)。设置为 0SOURCE_RETRY_COUNT
意味着重新连接尝试的次数没有限制,因此副本会无限期地尝试重新连接。SOURCE_CONNECT_RETRY
和 的值SOURCE_RETRY_COUNT
记录在源元数据存储库中,并显示在replication_connection_configuration
性能模式表中。SOURCE_RETRY_COUNT
取代--master-retry-count
服务器启动选项。-
SOURCE_SSL = {0|1}
指定副本是否加密复制连接。默认值为 0,表示副本不加密复制连接。如果设置 ,则可以使用 和 选项
SOURCE_SSL=1
配置加密 。SOURCE_SSL_
xxx
SOURCE_TLS_
xxx
设置
SOURCE_SSL=1
复制连接然后不设置其他 选项对应于 客户端的设置,如 加密连接的命令选项中所述。使用,连接尝试只有在可以建立加密连接时才会成功。复制连接不会退回到未加密的连接,因此没有与 复制设置对应的设置。如果已设置,则对应于 .SOURCE_SSL_
xxx
--ssl-mode=REQUIRED
SOURCE_SSL=1
--ssl-mode=PREFERRED
SOURCE_SSL=0
--ssl-mode=DISABLED
重要的为了帮助防止复杂的中间人攻击,副本验证服务器的身份很重要。您可以指定其他 选项以对应于设置 和
SOURCE_SSL_
xxx
--ssl-mode=VERIFY_CA
--ssl-mode=VERIFY_IDENTITY
,这是比默认设置更好的选择,有助于防止此类攻击。使用这些设置,副本检查服务器证书是否有效,并检查副本使用的主机名是否与服务器证书中的身份匹配。要实施其中一种验证级别,您必须首先确保服务器的 CA 证书对副本可靠可用,否则会导致可用性问题。因此,它们不是默认设置。-
SOURCE_SSL_
,xxx
SOURCE_TLS_
xxx
指定副本如何使用加密和密码来保护复制连接。即使在没有 SSL 支持的情况下编译的副本,也可以更改这些选项。它们保存到源元数据存储库,但如果副本未启用 SSL 支持,则会被忽略。字符串值 和 选项的值的最大长度为 511 个字符,但 除外 ,它的最大长度为 4000 个字符。
SOURCE_SSL_
xxx
SOURCE_TLS_
xxx
SOURCE_TLS_CIPHERSUITES
和 选项执行 与 加密连接 的命令选项中描述 的 和 客户端选项 相同的功能 。两组选项之间的对应关系,以及使用 和 选项来设置安全连接,在 第 17.3.1 节“设置复制以使用加密连接”中进行了解释。
SOURCE_SSL_
xxx
SOURCE_TLS_
xxx
--ssl-
xxx
--tls-
xxx
SOURCE_SSL_
xxx
SOURCE_TLS_
xxx
-
SOURCE_USER = '
user_name
' 用于连接到复制源服务器的复制用户帐户的用户名。字符串值的最大长度为 96 个字符。
对于组复制,此帐户必须存在于复制组的每个成员上。如果组使用 XCom 通信栈,它用于分布式恢复,如果组使用 MySQL 通信栈,它也用于组通信连接。与MySQL通讯栈,账号必须有
GROUP_REPLICATION_STREAM
权限。可以通过指定来设置一个空的用户名
SOURCE_USER=''
,但是不能用一个空的用户名来启动复制通道。在 MySQL 8.0.21 之前的版本中,SOURCE_USER
如果出于安全目的需要从复制元数据存储库中清除以前使用的凭据,则仅设置空用户名。之后不要使用通道,因为这些版本中的错误可以在从存储库读取空用户名时替换默认用户名(例如,在组复制通道自动重启期间)。从 MySQL 8.0.21 开始,设置一个空是有效的SOURCE_USER
如果您始终使用启动复制通道的START REPLICA
语句或语句提供用户凭据,则使用用户名并在之后使用该 通道。START GROUP_REPLICATION
这种方法意味着复制通道总是需要操作员干预才能重新启动,但用户凭证不会记录在复制元数据存储库中。重要的要使用通过插件进行身份验证的复制用户帐户连接到源
caching_sha2_password
,您必须按照 第 17.3.1 节“设置复制以使用加密连接”中所述设置安全连接,或者启用未加密连接以支持密码使用 RSA 密钥对进行交换。caching_sha2_password
身份验证插件是从 MySQL 8.0 创建的新用户的默认设置(有关详细信息,请参阅 第 6.4.1.2 节,“缓存 SHA-2 可插入身份验证”). 如果您创建或用于复制的用户帐户使用此身份验证插件,并且您未使用安全连接,则必须启用基于 RSA 密钥对的密码交换才能成功连接。您可以使用 此语句 的SOURCE_PUBLIC_KEY_PATH
选项或 选项来执行此操作。GET_SOURCE_PUBLIC_KEY=1
-
SOURCE_ZSTD_COMPRESSION_LEVEL =
level
用于连接到使用
zstd
压缩算法的复制源服务器的压缩级别。SOURCE_ZSTD_COMPRESSION_LEVEL
从 MySQL 8.0.18 开始可用。允许的级别从 1 到 22,值越大表示压缩级别越高。默认级别为 3。压缩级别设置对不使用
zstd
压缩的连接没有影响。有关更多信息,请参阅 第 4.2.8 节,“连接压缩控制”。
CHANGE REPLICATION SOURCE
TO
当您拥有源的快照并记录了与快照时间对应的源的二进制日志坐标时,这对于设置副本很有用。将快照加载到副本以将其与源同步后,您可以在副本上运行以指定副本应开始读取源二进制日志的坐标。以下示例更改副本使用的源服务器并建立副本开始读取的源二进制日志坐标:
CHANGE
REPLICATION SOURCE TO
SOURCE_LOG_FILE='
log_name
',
SOURCE_LOG_POS=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 节,“在故障转移期间切换源”。
当 GTID 在源和副本上使用时,指定 GTID 自动定位而不是给出二进制日志文件位置,如以下示例所示。有关在新的或停止的服务器、在线服务器或其他副本上配置和启动基于 GTID 的复制的完整说明,请参阅 第 17.1.3 节,“使用全局事务标识符进行复制”。
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
语句应用于
"source_3"
将副本连接到指定主机的复制通道。有关设置多源复制的指南,请参阅第 17.1.5 节,“MySQL 多源复制”。
下一个示例显示如何使副本应用您想要重复的中继日志文件中的事务。为此,源不需要可达。您可以使用
CHANGE REPLICATION SOURCE TO
来定位您希望副本开始重新应用事务的中继日志位置,然后启动 SQL 线程:
CHANGE REPLICATION SOURCE TO
RELAY_LOG_FILE='replica-relay-bin.006',
RELAY_LOG_POS=4025;
START REPLICA SQL_THREAD;
CHANGE REPLICATION SOURCE TO
也可用于跳过导致复制停止的二进制日志中的事务。执行此操作的适当方法取决于 GTID 是否在使用中。有关使用
CHANGE REPLICATION SOURCE TO
或其他方法跳过事务的说明,请参阅
第 17.1.7.3 节,“跳过事务”。