Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

7.6.7.7 复制克隆

克隆插件支持复制。除了克隆数据外,克隆操作还从捐赠者中提取复制坐标,并将其传输到受赠者,这使得克隆插件可以用于配置组复制成员和副本。使用克隆插件进行配置比复制大量事务要快得多且更高效。

组复制成员也可以配置克隆插件作为分布式恢复的选项,在这种情况下,加入成员将自动选择从现有组成员中检索组数据的最有效方式。有关更多信息,请参阅 第 20.5.4.2 节,“分布式恢复中的克隆”

在克隆操作期间,二进制日志位置(文件名、偏移量)和 gtid_executed GTID 集将从捐赠者 MySQL 服务器实例中提取并传输到受赠者。这使得可以在复制流中的一致位置上启动复制。二进制日志和中继日志,不会从捐赠者复制到受赠者。为了启动复制,必须在克隆数据和启动复制之间不 purge 所需的二进制日志。如果所需的二进制日志不可用,将报告复制握手机错误。因此,克隆实例应该尽快添加到复制组中,以避免所需的二进制日志被 purge 或新成员落后太多,需要更多的恢复时间。

  • 在克隆的 MySQL 服务器实例上发出以下查询以检查传输到受赠者的二进制日志位置:

    mysql> SELECT BINLOG_FILE, BINLOG_POSITION FROM performance_schema.clone_status;
  • 在克隆的 MySQL 服务器实例上发出以下查询以检查传输到受赠者的 gtid_executed GTID 集:

    mysql> SELECT @@GLOBAL.GTID_EXECUTED;

默认情况下,复制元数据存储库将在克隆操作期间从捐赠者复制到受赠者。复制元数据存储库持有可以用于恢复复制的复制相关配置设置。表 mysql.slave_master_infomysql.slave_relay_log_infomysql.slave_worker_info 都将被复制。

有关每个表中的内容,请参阅 第 19.2.4.2 节,“复制元数据存储库”

要克隆以进行复制,请执行以下步骤:

  1. 对于新的组复制组成员,首先按照第 20.2.1.6 节,“将实例添加到组中”中的说明配置 MySQL 服务器实例以便组复制。还需要按照第 20.5.4.2 节,“分布式恢复中的克隆”中的说明设置克隆的先决条件。当您在加入的成员上发出START GROUP_REPLICATION时,组复制将自动管理克隆操作,因此您不需要手动执行克隆操作,也不需要在加入的成员上执行任何进一步的设置步骤。

  2. 对于源/副本 MySQL 复制拓扑结构中的副本,首先需要从捐赠者 MySQL 服务器实例手动克隆数据到接收者。捐赠者必须是复制拓扑结构中的源或副本。有关克隆说明,请参阅第 7.6.7.3 节,“远程数据克隆”

  3. 在克隆操作成功完成后,如果您想在接收者 MySQL 服务器实例上使用与捐赠者相同的复制通道,需要验证哪些通道可以自动恢复复制在源/副本 MySQL 复制拓扑结构中,哪些需要手动设置。

    • 对于基于 GTID 的复制,如果接收者配置了gtid_mode=ON并从具有gtid_mode=ONON_PERMISSIVEOFF_PERMISSIVE 的捐赠者克隆,捐赠者的 gtid_executed GTID 集将应用于接收者。如果接收者是从拓扑结构中的副本克隆的,使用 GTID 自动定位的复制通道可以在克隆操作后自动恢复复制,当通道启动时不需要执行任何手动设置。

    • 对于基于二进制日志文件位置的复制,来自donor的二进制日志位置将应用于recipient。使用基于二进制日志文件位置的复制的复制通道在recipient上自动尝试执行中继日志恢复过程,使用克隆的中继日志信息,在重新启动复制之前。对于单线程副本(replica_parallel_workers 设置为 0),中继日志恢复应该在没有其他问题的情况下成功,使通道能够恢复复制而不需要进一步设置。对于多线程副本(replica_parallel_workers 大于 0),中继日志恢复通常无法自动完成。在这种情况下,将发出错误消息,您必须手动设置通道。

  4. 如果您需要手动设置克隆复制通道,或者想要在recipient上使用不同的复制通道,以下说明提供了摘要和缩略示例,以添加recipient MySQL 服务器实例到复制拓扑结构中。还请参阅适用于您的复制设置的详细说明。

    • 要将recipient 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';
    • 要将recipient MySQL 服务器实例添加到使用基于二进制日志文件位置的复制的 MySQL 复制拓扑结构中,请按照 第 19.1.2 节,“设置基于二进制日志文件位置的复制” 中的说明配置实例。添加复制通道,如以下缩略示例所示,使用在克隆操作期间传输到recipient的二进制日志位置:

      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';