clone 插件支持复制。除了克隆数据之外,克隆操作还会从捐赠者中提取复制坐标并将其传输到接收者,这使得可以使用 clone 插件来配置组复制成员和副本。使用 clone 插件进行配置比复制大量事务要快得多,也更有效。
组复制成员还可以配置为使用 clone 插件作为分布式恢复的选项,在这种情况下,加入的成员会自动选择从现有组成员检索组数据的最有效方式。有关更多信息,请参见 第 20.5.4.2 节,“克隆用于分布式恢复”.
在克隆操作期间,二进制日志位置(文件名、偏移量)和 gtid_executed
GTID 集都将从捐赠者 MySQL 服务器实例提取并传输到接收者。此数据允许在复制流中的一个一致位置启动复制。二进制日志和中继日志存储在文件中,不会从捐赠者复制到接收者。要启动复制,接收者需要赶上捐赠者的二进制日志必须在数据克隆时和复制启动之间不被清除。如果所需的二进制日志不可用,则会报告复制握手错误。因此,应在克隆实例添加至复制组后立即进行,以避免所需二进制日志被清除或新成员明显落后,从而需要更多恢复时间。
在克隆的 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 节,“复制元数据存储库”.
要克隆以进行复制,请执行以下步骤
对于组复制的新组成员,请首先根据 第 20.2.1.6 节,“向组添加实例” 中的说明配置 MySQL 服务器实例以进行组复制。还要设置 第 20.5.4.2 节,“克隆用于分布式恢复” 中描述的克隆先决条件。当您在加入的成员上发出
START GROUP_REPLICATION
时,克隆操作将由组复制自动管理,因此您无需手动执行此操作,也不需要在加入的成员上执行任何其他设置步骤。对于源/副本 MySQL 复制拓扑中的副本,请首先手动将数据从捐赠者 MySQL 服务器实例克隆到接收者。捐赠者必须是复制拓扑中的源或副本。有关克隆说明,请参见 第 7.6.7.3 节,“克隆远程数据”.
克隆操作成功完成后,如果您希望在接收者 MySQL 服务器实例上使用与捐赠者相同的复制通道,请验证哪些通道可以在源/副本 MySQL 复制拓扑中自动恢复复制,哪些需要手动设置。
对于基于 GTID 的复制,如果接收方配置了
gtid_mode=ON
并且从具有gtid_mode=ON
、ON_PERMISSIVE
或OFF_PERMISSIVE
的源服务器克隆,则接收方将应用从源服务器获取的gtid_executed
GTID 集。如果接收方从拓扑中已有的副本克隆,则接收方上的使用 GTID 自动定位的复制通道在克隆操作后启动时可以自动恢复复制。如果您只想使用这些相同的通道,则无需进行任何手动设置。对于基于二进制日志文件位置的复制,源服务器上的二进制日志文件位置将应用于接收方。接收方上使用基于二进制日志文件位置的复制的复制通道会在重新启动复制之前,使用克隆的重传日志信息自动尝试执行重传日志恢复过程。对于单线程副本 (
replica_parallel_workers
设置为 0),在没有其他问题的情况下,重传日志恢复应该能够成功,从而使通道无需进一步设置即可恢复复制。对于多线程副本 (replica_parallel_workers
大于 0),重传日志恢复很可能失败,因为它通常无法自动完成。在这种情况下,将发出错误消息,您必须手动设置通道。
如果您需要手动设置克隆的复制通道,或者想要在接收方上使用不同的复制通道,以下说明提供了将接收方 MySQL 服务器实例添加到复制拓扑中的摘要和简化示例。另请参阅适用于您的复制设置的详细说明。
要将接收方 MySQL 服务器实例添加到使用基于 GTID 的事务作为复制数据源的 MySQL 复制拓扑中,请根据 第 19.1.3.4 节,“使用 GTID 设置复制” 中的说明,按需配置该实例。添加该实例的复制通道,如下面的简化示例所示。
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';