克隆插件支持复制。除了克隆数据之外,克隆操作还会从捐赠者提取复制坐标并将其传输到接收者,这使得可以使用克隆插件来配置组复制成员和副本。使用克隆插件进行配置比复制大量事务快得多且更有效。
组复制成员还可以配置为使用克隆插件作为分布式恢复的选项,在这种情况下,加入的成员会自动选择最有效的方法从现有组成员检索组数据。有关更多信息,请参阅 第 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';