7.6.7.7 复制克隆
克隆插件支持复制。在克隆操作中,除了克隆数据外,还将捐赠服务器的复制坐标传递给接收服务器,使得克隆插件可以用于组播复制成员和副本的配置。使用克隆插件配置组播复制是比复制大量事务快捷高效的。
组播复制成员也可以配置使用克隆插件作为分布式恢复选项,在这种情况下,加入成员自动选择从现有组成员中最有效地获取组数据。更多信息,请参见第20.5.4.2节,“分布式恢复克隆”。
在克隆操作中,双方服务器实例都将二进制日志位置(文件名,偏移量)和gtid_executed
GTID 集合传递给接收服务器。这部分数据允许在复制流程中始终保持一致。捐赠服务器中的二进制日志和中继日志文件不被复制到接收服务器。如果需要的二进制日志在克隆数据后被删除,或者新成员落后太多,需要更多恢复时间,克隆实例应该尽快加入复制组以避免这些问题。
-
在克隆的 MySQL 服务器实例上执行该查询,以检查传输到接收者的二进制日志位置:
mysql> SELECT BINLOG_FILE, BINLOG_POSITION FROM performance_schema.clone_status;
-
在克隆的 MySQL 服务器实例上执行该查询,以检查
gtid_executed
GTID 集合,传输到接收者的:mysql> SELECT @@GLOBAL.GTID_EXECUTED;
默认情况下,复制元数据存储库在克隆操作中从捐赠服务器复制到接收服务器。复制元数据存储库保存了可以用来正确恢复复制的配置设置。表 mysql.slave_master_info
、mysql.slave_relay_log_info
和 mysql.slave_worker_info
都被复制。
每个表包含的内容,请见第19.2.4.2节,“复制元数据存储库”。
要克隆用于复制,执行以下步骤:
-
为新加入的组成员在 Group Replication 中首先配置 MySQL 服务器实例,遵循第20.2.1.6节,“添加实例到组”中的说明。同时,设置克隆的先决条件,如第20.5.4.2节,“分布式恢复克隆”中所述。加入成员执行
START GROUP_REPLICATION
时,Group Replication 自动管理克隆操作,您不需要手动进行该操作,也不需要在加入成员上执行其他设置步骤。 -
在源/副本 MySQL 复制拓扑结构中,为副本实例首先从捐赠 MySQL 服务器实例手动克隆数据。捐赠服务器必须是拓扑结构中的源或副本。关于克隆的说明,请见第7.6.7.3节,“远程数据克隆”。
-
克隆操作完成后,如果您想在接收 MySQL 服务器实例上使用与捐赠服务器相同的复制通道,验证哪些可以自动恢复拓扑结构中的源/副本 MySQL 复制拓扑结构中哪些需要手动设置。
-
对于基于GTID的复制,如果接收方配置了
gtid_mode=ON
,并且从一个捐赠服务器克隆过来,该捐赠服务器的gtid_executed
GTID 集合将被应用于接收方。如果接收方从拓扑结构中已经克隆过来的副本,接收方上的复制通道可以自动恢复复制操作,当通道启动时。您不需要进行任何手动设置,只要使用这些相同的通道。 -
对于基于二进制日志文件位置的复制,捐赠服务器上的二进制日志文件位置将被应用于接收方。接收方上的复制通道自动尝试执行relay log恢复过程,使用克隆后的relay log信息,重新启动复制。对于单线程副本(
replica_parallel_workers
设置为0),relay log恢复通常在无其他问题的情况下成功,允许通道重新启动复制不需要进一步设置。对于多线程副本(replica_parallel_workers
大于0),relay log恢复通常失败,因为它不能自动完成。在这种情况下,会出现错误信息,您需要手动设置通道。
-
-
如果您需要手动设置克隆复制通道或在接收端使用不同的复制通道,以下指南提供了添加接收 MySQL 服务器实例到复制拓扑结构的总结和简要示例。还请查看适用于您的复制设置的详细指南。
-
要将接收 MySQL 服务器实例添加到使用 GTID 事务作为复制数据源的 MySQL 复制拓扑结构中,按照第19.1.3.4节,“使用 GTIDs 设置复制”中的指南配置实例。为实例添加复制通道,如下所示的简要示例中,
CHANGE REPLICATION SOURCE TO
语句必须定义源主机地址和端口号,并且SOURCE_AUTO_POSITION
选项应启用,如下所示:CHANGE SOURCE TO SOURCE_HOST = 'source_host_name', SOURCE_PORT = source_port_num, ... SOURCE_AUTO_POSITION = 1, FOR CHANNEL 'setup_channel'; START REPLICA USER = 'user_name' PASSWORD = 'password' FOR CHANNEL 'setup_channel';
-
要将接收 MySQL 服务器实例添加到使用二进制日志文件位置基于复制的 MySQL 复制拓扑结构中,按照第19.1.2节,“使用二进制日志文件位置基于复制”中的指南配置实例。为实例添加复制通道,如下所示的简要示例中,使用克隆操作期间传输到接收端的二进制日志文件位置:
SELECT BINLOG_FILE, BINLOG_POSITION FROM performance_schema.clone_status; CHANGE SOURCE TO SOURCE_HOST = 'source_host_name', SOURCE_PORT = source_port_num, ... SOURCE_LOG_FILE = 'source_log_name', SOURCE_LOG_POS = source_log_pos, FOR CHANNEL 'setup_channel'; START REPLICA USER = 'user_name' PASSWORD = 'password' FOR CHANNEL 'setup_channel';
-