• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • MySQL服务器克隆插件

    clone插件允许在本地或从远程MySQL服务器实例克隆数据。克隆数据是存储在InnoDB其中的数据的物理快照,其中包括模式,表,表空间和数据字典元数据。克隆的数据包含一个功能齐全的数据目录,该目录允许使用克隆插件进行MySQL服务器配置。

    图5.1本地克隆操作

    本地克隆操作会将数据从启动克隆操作的MySQL服务器实例克隆到运行MySQL服务器实例的同一服务器或节点上的目录中。

    图5.2远程克隆操作

    远程克隆操作涉及启动克隆操作的本地MySQL服务器实例(“接收者”)和源数据所在的远程MySQL服务器实例(“施主”)。在收件人上启动远程克隆操作时,克隆的数据会通过网络从施主传输到收件人。默认情况下,远程克隆操作会删除收件人数据目录中的数据,并将其替换为克隆的数据。(可选)您可以将数据克隆到收件人的其他目录中,以避免删除现有数据。

    与通过远程克隆操作相比,通过本地克隆操作克隆的数据没有区别。两种操作都克隆相同的数据。

    克隆插件支持复制。除了克隆数据之外,克隆操作还从施主提取并传输复制坐标,并将其应用于接收者,从而可以使用克隆插件来配置组复制成员和复制从属。与复制大量事务相比,使用clone插件进行配置要快得多且效率更高(请)。还可以将组复制成员配置为使用克隆插件作为替代的恢复方法,以便成员自动选择从种子成员中检索组数据的最有效方法。有关更多信息,请参见“克隆分布式恢复”。

    clone插件支持克隆加密和页面压缩的数据。请和“克隆压缩数据”。

    必须先安装克隆插件,然后才能使用它。有关安装说明,有关克隆说明,请参见“本地克隆数据”和“克隆远程数据”。

    提供了性能架构表和工具来监视克隆操作。请参见“监视克隆操作”。

    安装克隆插件

    本节介绍如何安装和配置克隆插件。对于远程克隆操作,必须在施主和受主MySQL服务器实例上安装克隆插件。

    有关安装或卸载插件的一般信息,请参见“MySQL服务器插件”。

    要由服务器使用,插件库文件必须位于MySQL插件目录(由plugin_dir系统变量命名的目录)中。如有必要,请plugin_dir在服务器启动时设置值,以告知服务器插件目录位置。

    插件库文件的基本名称为mysql_clone.so。文件名后缀因平台.so而异(例如,对于Unix和类似Unix的系统,.dll对于Windows)。

    要在服务器启动时加载插件,请使用--plugin-load-add选项来命名包含该插件的库文件。使用这种插件加载方法,每次服务器启动时都必须给出该选项。例如,将以下行放入my.cnf文件中(.so根据需要调整平台的后缀):

    [mysqld]
    plugin-load-add=mysql_clone.so
    

    修改之后my.cnf,重新启动服务器以使新设置生效。

    注意

    --plugin-load-add在从以前的MySQL版本升级期间重新启动服务器时,无法使用该选项加载克隆插件。例如,将二进制文件或程序包从MySQL 5.7升级到MySQL 8.0后,尝试重新启动服务器plugin-load-add=mysql_clone.so会导致以下错误:[ERROR][MY-013238][Server]安装插件'clone'时出错:升级期间无法安装。解决方法是在尝试使用启动服务器之前先升级服务器plugin-load-add=mysql_clone.so

    或者,要在运行时加载插件,请使用以下语句(.so根据需要调整平台的后缀):

    INSTALL PLUGIN clone SONAME 'mysql_clone.so';
    

    INSTALL PLUGIN加载插件,并将其注册到mysql.plugins系统表中,以使插件在每次后续的正常服务器启动时都加载,而无需--plugin-load-add

    要验证插件安装,请检查INFORMATION_SCHEMA.PLUGINS表或使用以下SHOW PLUGINS语句(请参见“获取服务器插件信息”)。例如:

    mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
    FROM INFORMATION_SCHEMA.PLUGINS
    WHERE PLUGIN_NAME = 'clone';
    +------------------------	+---------------	+
    | PLUGIN_NAME             | PLUGIN_STATUS  |
    +------------------------	+---------------	+
    | clone                   | ACTIVE         |
    +------------------------	+---------------	+
    

    如果插件未能初始化,请检查服务器错误日志以获取克隆或与插件相关的诊断消息。

    如果插件先前已注册INSTALL PLUGIN或已加载--plugin-load-add,则可以--clone在服务器启动时使用该选项来控制插件激活状态。例如,要在启动时加载插件并防止在运行时将其删除,请使用以下选项:

    [mysqld]
    plugin-load-add=mysql_clone.so
    clone=FORCE_PLUS_PERMANENT
    

    如果要阻止服务器在没有克隆插件的情况下运行,请使用--clone值为FORCEFORCE_PLUS_PERMANENT强制服务器启动失败(如果插件未成功初始化)。

    有关插件激活状态的更多信息,请参见控制插件激活状态。

    本地克隆数据

    clone插件支持以下用于在本地克隆数据的语法:也就是说,将数据从本地MySQL数据目录克隆到运行MySQL服务器实例的同一服务器或节点上的另一个目录:

    CLONE LOCAL DATA DIRECTORY [=] 'clone_dir';
    

    要使用CLONE语法,必须安装克隆插件。有关安装说明,

    BACKUP_ADMIN权限才能执行CLONE LOCAL DATA DIRECTORY的语句。

    mysql> GRANT BACKUP_ADMIN ON *.* TO 'clone_user';
    

    clone_user将执行克隆操作的MySQL用户在哪里。您选择执行克隆操作的用户可以是具有BACKUP_ADMIN*。*特权的任何MySQL用户。

    以下示例演示了本地克隆数据:

    mysql> CLONE LOCAL DATA DIRECTORY = '/path/to/clone_dir';
    

    其中/path/to/clone_dir是将数据克隆到的本地目录的完整路径。绝对路径是必需的,并且指定的目录(“clone_dir”)一定不存在,但是指定的路径必须是存在的路径。MySQL服务器必须具有创建目录所需的写权限。

    注意

    本地克隆操作不支持克隆位于数据目录外部的用户创建的表或表空间。尝试克隆此类表或表空间会导致以下错误:错误1086(HY000):文件/path/to/tablespace_name.ibd'已经存在。克隆具有与源表空间相同路径的表空间会导致冲突,因此被禁止。

    所有其他用户创建的InnoDB表和表空间,InnoDB系统表空间,重做日志和撤消表空间都将克隆到指定目录。

    如果需要,可以在克隆操作完成后在克隆目录上启动MySQL服务器。

    shell>mysqld_safe --datadir=clone_dir
    

    clone_dir数据克隆到的目录在哪里。

    有关监视克隆操作状态和进度的信息,请参见“监视克隆操作”。

    克隆远程数据

    clone插件支持以下用于克隆远程数据的语法;也就是说,从远程MySQL服务器实例(施主)克隆数据,并将其传输到启动克隆操作的MySQL实例(受主)。

    CLONE INSTANCE FROM 'user'@'host':port
    IDENTIFIED BY 'password'
    [DATA DIRECTORY [=] 'clone_dir']
    [REQUIRE [NO] SSL];
    

    哪里:

    • user是施主MySQL服务器实例上的克隆用户。
    • passworduser密码。
    • hosthostname施主MySQL服务器实例的地址。不支持Internet协议版本6(IPv6)地址格式。可以代替使用IPv6地址的别名。IPv4地址可以按原样使用。
    • portport施主MySQL服务器实例的编号。(mysqlx_port不支持指定的X协议端口。也不支持通过MySQL路由器连接到施主MySQL服务器实例。)
    • DATA DIRECTORY[=]'clone_dir'是一个可选子句,用于在收件人上为要克隆的数据指定目录。如果您不想删除收件人数据目录中的现有数据,请使用此选项。绝对路径是必需的,目录必须不存在。MySQL服务器必须具有创建目录所需的写权限。

      当不使用optional 子句时,克隆操作将删除收件人数据目录中的现有数据,将其替换为克隆的数据,然后自动重新启动服务器。DATA DIRECTORY[=]'clone_dir'

    • [REQUIRE[NO] SSL]明确指定在通过网络传输克隆数据时是否使用加密连接。如果不能满足显式规范,则返回错误。如果未指定SSL子句,则克隆默认会尝试建立加密连接,如果安全连接尝试失败,则会回退到不安全的连接。无论是否指定此子句,克隆加密数据时都需要安全连接。有关更多信息,请参见配置用于克隆的加密连接。
    注意

    默认情况下,InnoDB驻留在施主MySQL服务器实例上的数据目录中的用户创建的表和表空间将被克隆到收件人MySQL服务器实例上的数据目录中。如果指定了子句,则将它们克隆到指定目录。DATA DIRECTORY[=]'clone_dir'

    用户创建的InnoDB表和表空间驻留在施主MySQL服务器实例上的数据目录之外,被克隆到收件人MySQL服务器实例上的相同路径。如果表或表空间已经存在,则会报告错误。

    默认情况下,InnoDB系统表空间,重做日志和撤消表空间克隆到被供体构造(如由所定义的相同的位置innodb_data_home_dirinnodb_data_file_pathinnodb_log_group_home_dirinnodb_undo_directory分别)。如果指定了子句,则将那些表空间和日志克隆到指定目录。DATA DIRECTORY[=]'clone_dir'

    远程克隆先决条件

    要执行克隆操作,克隆插件必须在施主和受主MySQL服务器实例上均处于活动状态。有关安装说明,

    执行克隆操作需要提供者和接受者上的MySQL用户(“克隆用户”)。

    • 在施主上,克隆用户需要BACKUP_ADMIN特权才能访问和传输来自施主的数据,并在克隆操作期间阻止DDL。
    • 在收件人上,克隆用户需要具有以下CLONE_ADMIN特权:替换收件人数据,在克隆操作期间阻止DDL以及自动重新启动服务器。该CLONE_ADMIN权限包括BACKUP_ADMINSHUTDOWN隐含的特权。

    遵循此先决条件信息的远程克隆示例中包含创建克隆用户和授予所需特权的说明。

    CLONE INSTANCE执行该语句时,将检查以下先决条件:

    • 施主和受主必须具有相同的MySQL服务器版本。MYSQL 8.0.17及更高版本支持clone插件。

      mysql> SHOW VARIABLES LIKE 'version';
      +---------------	+--------	+
      | Variable_name  | Value   |
      +---------------	+--------	+
      | version        | 8.0.17  |
      +---------------	+--------	+
      
    • 施主和受主MySQL服务器实例必须在相同的操作系统和平台上运行。例如,如果施主实例在Linux 64位平台上运行,则收件人实例也必须在该平台上运行。有关如何确定操作系统平台的信息,请参阅您的操作系统文档。
    • 收件人必须具有足够的磁盘空间来存储克隆的数据。默认情况下,在克隆供体数据之前会删除收件人数据,因此您仅需要足够的空间来存储供体数据。如果使用该DATA DIRECTORY子句克隆到命名目录,则必须有足够的磁盘空间用于现有的收件人数据和克隆的数据。您可以通过检查文件系统上的数据目录大小以及位于数据目录外部的任何表空间的大小来估计数据的大小。在估算供体上的数据大小时,请记住只有InnoDB数据被克隆。如果将数据存储在其他存储引擎中,请相应地调整数据大小估计。
    • InnoDB允许在数据目录之外创建一些表空间类型。如果施主MySQL服务器实例的表空间位于数据目录之外,则克隆操作必须能够访问这些表空间。您可以查询INFORMATION_SCHEMA.FILES表以标识位于数据目录之外的表空间。驻留在数据目录之外的文件具有到数据目录以外的目录的标准路径。

      mysql> SELECT FILE_NAME FROM INFORMATION_SCHEMA.FILES;
      
    • 在捐助者上活动的插件(包括任何密钥环插件)也必须在接收者上活动。您可以通过发布SHOW PLUGINS语句或查询INFORMATION_SCHEMA.PLUGINS表来标识活动插件。
    • 施主和受主必须具有相同的MySQL服务器字符集和排序规则。有关MySQL服务器字符集和排序规则配置的信息,请参见“字符集配置”。
    • 同样innodb_page_sizeinnodb_data_file_path设置都需要对供体和受体。在innodb_data_file_path对供体和受体设置必须指定相同数量的大小相等的数据文件。您可以使用SHOW VARIABLES语法检查变量设置。

      mysql> SHOW VARIABLES LIKE 'innodb_page_size';
      mysql> SHOW VARIABLES LIKE 'innodb_data_file_path';
      
    • 如果要克隆加密或页面压缩的数据,则供体和接收者必须具有相同的文件系统块大小。对于页面压缩的数据,收件人文件系统必须支持稀疏文件和打孔,以便在收件人上进行打孔。有关这些功能以及如何识别使用它们的表和表空间的信息,请和“克隆压缩数据”。要确定文件系统块的大小,请参阅操作系统文档。
    • 如果要克隆加密的数据,则需要安全连接。请参阅配置用于克隆的加密连接。
    • clone_valid_donor_list收件人设置必须包括捐助MySQL服务器实例的主机地址。您只能从有效捐助者列表上的主机克隆数据。具有SYSTEM_VARIABLES_ADMIN特权的MySQL用户需要配置此变量。clone_valid_donor_list本节后面的远程克隆示例中提供了设置变量的说明。您可以clone_valid_donor_list使用SHOW VARIABLES语法检查设置。

      mysql> SHOW VARIABLES LIKE 'clone_valid_donor_list';
      
    • 不得运行其他克隆操作。一次只能进行一次克隆操作。要确定克隆操作是否正在运行,请查询clone_status表。请参阅使用性能模式克隆表监视克隆操作。
    • 克隆插件以1MB数据包以及元数据的形式传输数据。max_allowed_packet因此,在捐助者和接收者MySQL服务器实例上的最低要求值为2MB。max_allowed_packet小于2MB 的值将导致错误。使用以下查询来检查您的max_allowed_packet设置:

      mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
      

    以下先决条件也适用:

    • 供体上的撤消表空间文件名必须唯一。将数据克隆到接收者时,撤消表空间(无论它们在施主上的位置如何)都将克隆到innodb_undo_directory接收者的位置或子句指定的目录(如果使用)中。由于这个原因,不允许在施主上使用重复的撤消表空间文件名。从MySQL 8.0.18开始,如果在克隆操作期间遇到重复的撤消表空间文件名,则会报告错误。在MySQL 8.0.18之前,克隆具有相同文件名的撤消表空间可能导致撤消表空间文件在接收者上被覆盖。DATA DIRECTORY[=]'clone_dir'

      要在施主上参见撤消表空间文件名以确保它们唯一,请查询INFORMATION_SCHEMA.FILES

      mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES 
      WHERE FILE_TYPE LIKE 'UNDO LOG';
      

      有关删除和添加撤消表空间文件的信息,请参见“撤消表空间”。

    • 默认情况下,克隆数据后,收件人MySQL服务器实例将自动重新启动(停止和启动)。为了使自动重启发生,收件人上的监视过程必须可用以检测服务器关闭。否则,在克隆数据并关闭接收方MySQL服务器实例后,克隆操作会因以下错误而暂停:

      ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).
      

      此错误并不表示克隆失败。这意味着克隆数据后,必须再次手动启动收件人MySQL服务器实例。手动启动服务器后,可以连接到收件人MySQL服务器实例并检查“性能模式”克隆表,以验证克隆操作是否成功完成(请参阅使用Performance Schema Clone Tables监视克隆操作。)该RESTART语句具有相同的监视过程要求。有关更多信息,请参见“ RESTART语句”。如果使用该DATA DIRECTORY子句克隆到命名目录,则此要求不适用,因为在这种情况下不会执行自动重启。

    • 几个变量控制远程克隆操作的各个方面。在执行远程克隆操作之前,请检查变量并根据需要调整设置以适合您的计算环境。克隆变量是在执行克隆操作的收件人MySQL服务器实例上设置的。
    克隆远程数据

    以下示例演示了克隆远程数据。默认情况下,远程克隆操作会删除收件人数据目录中的数据,将其替换为克隆的数据,然后重新启动MySQL服务器。

    该示例假定满足远程克隆先决条件。请参阅远程克隆先决条件。

    1. 使用管理用户帐户登录到施主MySQL服务器实例。

      1. 创建具有BACKUP_ADMIN特权的克隆用户。

        mysql> CREATE USER 'donor_clone_user'@'example.donor.host.com' IDENTIFIED BY 'password';
        mysql> GRANT BACKUP_ADMIN on *.* to 'donor_clone_user'@'example.donor.host.com';
        
      2. 安装克隆插件:

        mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
        
    2. 使用管理用户帐户登录到收件人MySQL服务器实例。

      1. 创建具有CLONE_ADMIN特权的克隆用户。

        mysql> CREATE USER 'recipient_clone_user'@'example.recipient.host.com' IDENTIFIED BY 'password';
        mysql> GRANT CLONE_ADMIN on *.* to 'recipient_clone_user'@'example.recipient.host.com';
        
      2. 安装克隆插件:

        mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
        
      3. 将施主MySQL服务器实例的主机地址添加到clone_valid_donor_list变量设置中。

        mysql> SET GLOBAL clone_valid_donor_list = 'example.donor.host.com:3306';
        
    3. 以您先前创建的克隆用户(recipient_clone_user'@'example.recipient.host.com)登录到收件人MySQL服务器实例,并执行该CLONE INSTANCE语句。

      mysql> CLONE INSTANCE FROM 'donor_clone_user'@'example.donor.host.com':3306
      IDENTIFIED BY 'password';
      

      克隆数据后,收件人上的MySQL服务器实例将自动重新启动。

      有关监视克隆操作状态和进度的信息,请参见“监视克隆操作”。

    克隆到命名目录

    默认情况下,远程克隆操作会删除收件人数据目录中的数据,并将其替换为克隆的数据。通过克隆到命名目录,可以避免从收件人数据目录中删除现有数据。

    克隆到命名目录的过程与克隆远程数据中描述的过程相同,但有一个例外:CLONE INSTANCE语句必须包含该DATA DIRECTORY子句。例如:

    mysql> CLONE INSTANCE FROM 'user'@'example.donor.host.com':3306
    IDENTIFIED BY 'password'
    DATA DIRECTORY = '/path/to/clone_dir';
    

    绝对路径是必需的,目录必须不存在。MySQL服务器必须具有创建目录所需的写权限。

    克隆到命名目录时,克隆数据后,收件人MySQL服务器实例不会自动重新启动。如果要在命名目录上重启MySQL服务器,则必须手动重启:

    shell>mysqld_safe --datadir=/path/to/clone_dir
    

    /path/to/clone_dir收件人上命名目录的路径在哪里。

    配置加密连接以进行克隆

    您可以为远程克隆操作配置加密连接,以保护通过网络克隆的数据。克隆加密数据时,默认情况下需要加密连接。()

    以下说明介绍了如何配置收件人MySQL服务器实例以使用加密连接。假定施主MySQL服务器实例已配置为使用加密连接。如果没有,请参考“配置MySQL以使用加密连接”以获取服务器端配置说明。

    要将接收方MySQL服务器实例配置为使用加密连接,请执行以下操作:

    1. 使施主MySQL服务器实例的客户端证书和密钥文件对收件人主机可用。使用安全通道将文件分发到收件人主机,或者将它们放在收件人主机可访问的已安装分区上。可用的客户端证书和密钥文件包括:

      • ca.pem

        自签名证书颁发机构(CA)文件。

      • client-cert.pem

        客户端公钥证书文件。

      • client-key.pem

        客户端私钥文件。

    2. 在收件人MySQL服务器实例上配置以下SSL选项。

      • clone_ssl_c

        指定自签名证书颁发机构(CA)文件的路径。

      • clone_ssl_cert

        指定客户端公共密钥证书文件的路径。

      • clone_ssl_key

        指定客户端私钥文件的路径。

      例如:

      clone_ssl_c =/path/to/ca.pem   
      clone_ssl_cert=/path/to/client-cert.pem
      clone_ssl_key=/path/to/client-key.pem
      
    3. 要要求使用加密连接,请在接收方上REQUIRE SSL发出该CLONE语句时包括该子句。

      mysql> CLONE INSTANCE FROM 'user'@'example.donor.host.com':3306
      IDENTIFIED BY 'password'
      DATA DIRECTORY = '/path/to/clone_dir'
      REQUIRE SSL;
      

      如果未指定SSL子句,则克隆插件默认情况下会尝试建立加密连接,如果加密连接尝试失败,则会回退到未加密连接。

      注意

      如果要克隆加密的数据,则无论是否REQUIRE SSL指定该子句,默认情况下都需要加密的连接。REQUIRE NO SSL如果尝试克隆加密的数据,使用将导致错误。


    克隆加密数据

    支持克隆加密数据。适用以下要求:

    • 克隆远程数据时需要安全连接,以确保通过网络安全传输未加密的表空间密钥。表空间密钥在传输之前在提供者处解密,并在使用接收者主密钥的接收者处重新加密。如果加密连接不可用或该REQUIRE NO SSL语句中使用了该子句,则会CLONE INSTANCE报告错误。有关配置用于克隆的加密连接的信息,请参阅《配置用于克隆的加密连接》。
    • 将数据克隆到使用本地管理的密钥环的本地数据目录时,在克隆目录上启动MySQL服务器时必须使用相同的密钥环。
    • 将数据克隆到使用本地管理的密钥环的远程数据目录(收件人目录)时,在克隆目录上启动MySQL服务器时必须使用收件人密钥环。
    注意

    innodb_redo_log_encryptinnodb_undo_log_encrypt而克隆操作正在进行变量设置不能被修改。

    有关数据加密功能的信息,请参见“ InnoDB静态数据加密”。

    克隆压缩数据

    支持克隆页面压缩数据。克隆远程数据时,以下要求适用:

    • 收件人文件系统必须支持稀疏文件和打孔,才能在收件人上进行打孔。
    • 供体和接收者文件系统必须具有相同的块大小。如果文件系统块大小不同,则会报告类似以下错误:错误3868(HY000):克隆配置FS块大小:施主值:114688与收件人值:4096不同。

    有关页面压缩功能的信息,请参见“ InnoDB页面压缩”。

    复制克隆

    克隆插件支持复制。除了克隆数据之外,克隆操作还从供体中提取复制坐标并将其传递给接收者,从而可以使用克隆插件来配置组复制成员和复制从属。与复制大量事务相比,使用克隆插件进行配置要快得多,效率也更高。

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

    在克隆操作期间,二进制日志位置(文件名,偏移量)和gtid_executed提取GTID集,并将其从施主MySQL服务器实例传输到接收者。此数据允许在复制流中的一致位置启动复制。二进制日志和中继日志(保存在文件中)不会从施主复制到收件人。要启动复制,在克隆数据到开始复制之间,不得清除收件人赶上捐赠者所需的二进制日志。如果所需的二进制日志不可用,则会报告复制握手错误。因此,应将克隆的实例添加到复制组中,而不会产生过多的延迟,以避免清除所需的二进制日志或新成员明显滞后,

    • 在克隆的MySQL服务器实例上发出以下查询,以检查已转移到接收方的二进制日志位置:

      mysql> SELECT BINLOG_FILE, BINLOG_POSITION FROM performance_schem .clone_status;
      
    • 在克隆的MySQL服务器实例上发出以下查询,以检查gtid_executed已转移到接收者的GTID集:

      mysql> SELECT @@GLOBAL.GTID_EXECUTED;
      

    在收件人上设置master_info_repository=TABLE和时relay_log_info_repository=TABLE(这是MySQL 8.0中的默认设置),从属状态日志保存在表中,这些表在克隆操作期间从供体复制到收件人。从属状态日志包含与复制相关的配置设置,可用于在克隆操作后正确恢复复制。

    • 在MySQL 8.0.17和8.0.18中,仅mysql.slave_master_info复制表(主信息日志)。
    • 从MySQL 8.0.19起,还复制了表mysql.slave_relay_log_info(中继日志信息日志)和mysql.slave_worker_info(从属工作日志)。

    有关每个表中包含的内容的列表,请参见“从站状态日志”。请注意,如果master_info_repository=FILErelay_log_info_repository=FILE在服务器上设置(这是不是在MySQL 8.0默认的,不建议使用),从状态日志不进行克隆,仅在TABLE设置时克隆它们。

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

    1. 对于用于组复制的新组成员,请首先按照“向组添加实例”中的说明为组复制配置MySQL Server实例。还设置“克隆分布式恢复”中所述的克隆前提条件。在START GROUP_REPLICATION加入成员上发出命令时,克隆操作由组复制自动管理,因此您无需手动执行该操作,也无需在加入成员上执行任何其他设置步骤。
    2. 对于主/从MySQL复制拓扑中的从属,请首先将数据从施主MySQL服务器实例克隆到收件人。施主必须是复制拓扑中的主服务器或从服务器。有关克隆说明,请参见“克隆远程数据”。
    3. 克隆操作成功完成后,如果要在接收方MySQL服务器实例上使用供体上存在的相同复制通道,请验证其中哪些可以在主/从MySQL复制拓扑中自动恢复复制,以及哪些需要手动设置。

      • 对于基于GTID的复制,如果收件人被配置有gtid_mode=ON和已经从供体克隆与gtid_mode=ONON_PERMISSIVEOFF_PERMISSIVE,将gtid_executed来自供体GTID集在接收方应用。如果收件人是从奴隶已经在拓扑克隆,收件人的复制渠道GTID使用自动定位(由指定MASTER_AUTO_POSITION的选项CHANGE MASTER TO语句)可以在通道启动克隆操作后自动恢复复制。如果您只想使用这些相同的通道,则无需执行任何手动设置。
      • 对于基于二进制日志文件位置的复制,如果接收者位于MySQL 8.0.17或8.0.18,则来自施主的二进制日志位置不会应用于接收者,仅记录在“性能模式”clone_status表中。因此,必须手动设置使用二进制日志文件基于位置的复制的收件人上的复制通道,以在克隆操作后恢复复制。确保这些通道未配置为在服务器启动时自动启动复制,因为它们将没有二进制日志位置,并会尝试从头开始复制。
      • 对于基于二进制日志文件位置的复制,如果收件人使用的是MySQL 8.0.19或更高版本,则将来自施主的二进制日志位置应用于收件人。收件人上使用基于二进制日志文件位置的复制的复制通道会在重新启动复制之前自动尝试使用克隆的中继日志信息来执行中继日志恢复过程。对于单线程从属服务器(slave_parallel_workers设置为0),中继日志恢复应该在没有其他问题的情况下成功完成,从而使通道无需进一步设置即可恢复复制。对于多线程从站(slave_parallel_workers大于0),则中继日志恢复很可能会失败,因为它通常无法自动完成。在这种情况下,将发出错误消息,并且您必须手动设置通道。
    4. 如果您需要手动设置克隆的复制通道,或者要在接收者上使用不同的复制通道,则以下说明提供了将接收者MySQL服务器实例添加到复制拓扑的摘要和缩写示例。另请参阅适用于您的复制设置的详细说明。

      • 要将收件人MySQL服务器实例添加到使用基于GTID的事务作为复制数据源的MySQL复制拓扑中,请按照“使用GTID设置复制”中的说明,根据需要配置实例。如以下缩写示例所示,为实例添加复制通道。该CHANGE MASTER TO语句必须定义主机的主机地址和端口号,并且MASTER_AUTO_POSITION应该启用该选项,如下所示:

        mysql> CHANGE MASTER TO MASTER_HOST = 'master_host_name', MASTER_PORT = master_port_num,
        ...
        MASTER_AUTO_POSITION = 1,
        FOR CHANNEL 'setup_channel';
        mysql> START SLAVE USER = 'user_name' PASSWORD = 'password' FOR CHANNEL 'setup_channel';
        
      • 要将接收方MySQL服务器实例添加到使用基于二进制日志文件位置的复制的MySQL复制拓扑中,请按照“设置基于二进制日志文件位置的复制”中的说明,根据需要配置实例。如下面的缩写示例所示,使用克隆操作期间转移到接收者的二进制日志位置来添加实例的复制通道:

        mysql> SELECT BINLOG_FILE, BINLOG_POSITION FROM performance_schem .clone_status;  
        mysql> CHANGE MASTER TO MASTER_HOST = 'master_host_name', MASTER_PORT = master_port_num,
        ...
        MASTER_LOG_FILE = 'master_log_name',
        MASTER_LOG_POS = master_log_pos, 
        FOR CHANNEL 'setup_channel';
        mysql> START SLAVE USER = 'user_name' PASSWORD = 'password' FOR CHANNEL 'setup_channel';
        

    克隆操作期间创建的目录和文件

    克隆数据后,将创建以下目录和文件供内部使用。它们不应该被修改。

    • #clone:包含克隆操作使用的内部克隆文件。在要复制数据的目录中创建。
    • #ib_archive:包含内部存档的日志文件,这些文件在克隆操作期间存档在捐赠者上。
    • *.#clone files:当现有数据目录被远程克隆操作替换时,在收件人上创建的临时数据文件。

    远程克隆操作失败处理

    本节介绍了克隆操作不同阶段的故障处理。

    1. 已检查先决条件(请参阅“远程克隆先决条件”)。

      • 如果在前提条件检查期间发生故障,则该CLONE INSTANCE操作将报告错误。
    2. 采取了备用锁定来阻止DDL操作。

      • 如果克隆操作在clone_ddl_timeout变量指定的时限内无法获得DDL锁定,则会报告错误。
    3. 在将数据克隆到收件人数据目录之前,将删除收件人上用户创建的数据(方案,表,表空间)和二进制日志。

      • 在远程克隆操作期间从接收者中删除用户创建的数据时,接收者数据目录中的现有数据不会保存,并且如果发生故障可能会丢失。如果要替换收件人上的数据很重要,则应在开始远程克隆操作之前进行备份。

        出于参考目的,警告会打印到服务器错误日志中,以指定何时开始和结束数据删除:

        [Warning] [MY-013453] [InnoDB] Clone removing all user data for provisioning:
        Started...
        
        [Warning] [MY-013453] [InnoDB] Clone removing all user data for provisioning:
        Finished
        

        如果在删除数据时发生故障,则接收者可能会留下克隆操作之前存在的部分方案,表和表空间。在执行克隆操作期间或发生故障之后的任何时间,服务器始终处于一致状态。

    4. 从供体克隆数据。克隆了用户创建的数据,字典元数据和其他系统数据。

      • 如果在克隆数据时发生故障,则回滚克隆操作并删除所有克隆的数据。在此阶段,还删除了收件人上先前存在的数据,这使收件人没有用户数据。

        如果发生这种情况,您可以纠正故障原因并重新执行克隆操作,也可以放弃克隆操作并从克隆操作之前进行的备份中还原收件人数据。

    5. 服务器自动重新启动(适用于不克隆到命名目录的远程克隆操作)。在启动期间,将执行典型的服务器启动任务。

      • 如果服务器自动重启失败,则可以手动重启服务器以完成克隆操作。

    如果在克隆操作过程中发生网络错误,则如果在五分钟内解决了错误,操作将继续。否则,操作将中止并返回错误。

    监视克隆操作

    本节介绍监视克隆操作的选项。

    • 使用性能模式克隆表监视克隆操作
    • 使用性能模式阶段事件监视克隆操作
    • 使用性能模式克隆工具监视克隆操作
    • Com_clone状态变量

    使用性能模式克隆表监视克隆操作

    克隆操作可能需要一些时间才能完成,具体取决于数据量和与数据传输相关的其他因素。您可以使用clone_statusclone_progress性能模式表监视收件人MySQL服务器实例上克隆操作的状态和进度。

    注意

    clone_statusclone_progress性能模式的表可用于监视只有收件人的MySQL服务器实例的克隆操作。要监视施主MySQL服务器实例上的克隆操作,请使用克隆阶段事件,如使用性能架构阶段事件监视克隆操作中所述。

    • clone_status表提供了当前或上次执行的克隆操作的状态。克隆操作有四种可能的状态:Not StartedIn ProgressCompleted,和Failed
    • clone_progress表按阶段提供了当前或上次执行的克隆操作的进度信息。克隆操作的各个阶段包括DROP DATAFILE COPYPAGE_COPYREDO_COPYFILE_SYNCRESTART,和RECOVERY

    SELECTEXECUTE特权上的性能架构需要访问性能架构克隆表。

    要检查克隆操作的状态:

    1. 连接到收件人MySQL服务器实例。
    2. 查询clone_status表:

      mysql> SELECT STATE FROM performance_schem .clone_status;
      +-----------	+
      | STATE      |
      +-----------	+
      | Completed  |
      +-----------	+
      

    如果在克隆操作期间发生故障,则可以查询clone_status表以获取错误信息:

    mysql> SELECT STATE, ERROR_NO, ERROR_MESSAGE FROM performance_schem .clone_status;
    +-----------	+----------	+---------------	+
    | STATE      | ERROR_NO  | ERROR_MESSAGE  |
    +-----------	+----------	+---------------	+
    | Failed     | xxx  | "xxxxxxxxxxx"  |
    +-----------	+----------	+---------------	+
    

    要参见克隆操作每个阶段的详细信息:

    1. 连接到收件人MySQL服务器实例。
    2. 查询clone_progress表。例如,以下查询为克隆操作的每个阶段提供状态和结束时间数据:

      mysql> SELECT STAGE, STATE, END_TIME FROM performance_schem .clone_progress;
      +-----------	+-----------	+----------------------------	+
      | stage      | state      | end_time                    |
      +-----------	+-----------	+----------------------------	+
      | DROP DATA  | Completed  | 2019 -01 -27 22:45:43.141261  |
      | FILE COPY  | Completed  | 2019 -01 -27 22:45:44.457572  |
      | PAGE COPY  | Completed  | 2019 -01 -27 22:45:44.577330  |
      | REDO COPY  | Completed  | 2019 -01 -27 22:45:44.679570  |
      | FILE SYNC  | Completed  | 2019 -01 -27 22:45:44.918547  |
      | RESTART    | Completed  | 2019 -01 -27 22:45:48.583565  |
      | RECOVERY   | Completed  | 2019 -01 -27 22:45:49.626595  |
      +-----------	+-----------	+----------------------------	+
      

      有关您可以监视的其他克隆状态和进度数据点,请参见“性能架构克隆表”。

    使用性能模式阶段事件监视克隆操作

    克隆操作可能需要一些时间才能完成,具体取决于数据量和与数据传输相关的其他因素。有三个阶段的事件用于监视克隆操作的进度。每个阶段的事件报告WORK_COMPLETEDWORK_ESTIMATED值。报告值会随着操作的进行而修改。

    这种监视克隆操作的方法可以在施主或受主MySQL服务器实例上使用。

    按照发生的顺序,克隆操作阶段事件包括:

    • stage/innodb/clone(file copy):指示克隆操作的文件复制阶段的进度。WORK_ESTIMATEDWORK_COMPLETED单位是文件块。在文件复制阶段开始时就知道要传输的文件数,并且基于文件数来估计块数。WORK_ESTIMATED设置为估计的文件块数。WORK_COMPLETED发送每个块后更新。
    • stage/innodb/clone(page copy):指示克隆操作的页面复制阶段的进度。WORK_ESTIMATEDWORK_COMPLETED单位是页面。一旦完成文件复制阶段,就知道要传输的页面数,并将WORK_ESTIMATED其设置为该值。WORK_COMPLETED发送每页后更新。
    • stage/innodb/clone(redo copy):指示克隆操作的重做复制阶段的进度。WORK_ESTIMATEDWORK_COMPLETED单位是重做块。一旦页面复制阶段完成,就知道要传输的重做块的数量,并将WORK_ESTIMATED其设置为该值。WORK_COMPLETED发送每个块后更新。

    以下示例演示了如何启用stage/innodb/clone%事件工具和相关的使用者表来监视克隆操作。有关性能架构阶段事件工具和相关使用者的信息,请参见“性能架构阶段事件表”。

    1. 启用stage/innodb/clone%工具:

      mysql> UPDATE performance_schem .setup_instruments SET ENABLED = 'YES'
      WHERE NAME LIKE 'stage/innodb/clone%';
      
    2. 启用舞台活动消费表,其中包括events_stages_currentevents_stages_history,和events_stages_history_long

      mysql> UPDATE performance_schem .setup_consumers SET ENABLED = 'YES'
      WHERE NAME LIKE '%stages%';
      
    3. 运行克隆操作。在此示例中,本地数据目录被克隆到名为的目录中cloned_dir

      mysql> CLONE LOCAL DATA DIRECTORY = '/path/to/cloned_dir';
      
    4. 通过查询性能架构events_stages_current表,检查克隆操作的进度。所显示的阶段事件根据正在进行的克隆阶段而有所不同。该WORK_COMPLETED列显示已完成的工作。该WORK_ESTIMATED列显示了总共需要的工作。

      mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schem .events_stages_current
      WHERE EVENT_NAME LIKE 'stage/innodb/clone%';
      +--------------------------------	+----------------	+----------------	+
      | EVENT_NAME                      | WORK_COMPLETED  | WORK_ESTIMATED  |
      +--------------------------------	+----------------	+----------------	+
      | stage/innodb/clone (redo copy)  | 1  | 1  |
      +--------------------------------	+----------------	+----------------	+
      

      events_stages_current如果克隆操作已完成,则该表将返回一个空集。在这种情况下,您可以检查events_stages_history表以参见事件数据以了解完成的操作。例如:

      mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM events_stages_history
      WHERE EVENT_NAME LIKE 'stage/innodb/clone%';
      +--------------------------------	+----------------	+----------------	+
      | EVENT_NAME                      | WORK_COMPLETED  | WORK_ESTIMATED  |
      +--------------------------------	+----------------	+----------------	+
      | stage/innodb/clone (file copy)  | 301  | 301  |
      | stage/innodb/clone (page copy)  | 0  | 0  |
      | stage/innodb/clone (redo copy)  | 1  | 1  |
      +--------------------------------	+----------------	+----------------	+
      
    使用性能模式克隆工具监视克隆操作

    Performance Schem 提供了用于克隆操作的高级性能监视的工具。要参见可用的克隆检测,请发出以下查询:

    mysql> SELECT * FROM performance_schem .setup_instruments
    WHERE NAME LIKE WHERE NAME LIKE '%clone%';
    +----------------------------------------------	+---------	+
    | NAME                                          | ENABLED  |
    +----------------------------------------------	+---------	+
    | wait/synch/mutex/innodb/clone_snapshot_mutex  | NO       |
    | wait/synch/mutex/innodb/clone_sys_mutex       | NO       |
    | wait/synch/mutex/innodb/clone_task_mutex      | NO       |
    | wait/io/file/innodb/innodb_clone_file         | YES      |
    | stage/innodb/clone (file copy)                | YES      |
    | stage/innodb/clone (redo copy)                | YES      |
    | stage/innodb/clone (page copy)                | YES      |
    | statement/abstract/clone                      | YES      |
    | statement/clone/local                         | YES      |
    | statement/clone/client                        | YES      |
    | statement/clone/server                        | YES      |
    | memory/innodb/clone                           | YES      |
    | memory/clone/data                             | YES      |
    +----------------------------------------------	+---------	+
    

    等待仪器

    性能架构等待工具可跟踪耗时的事件。克隆等待事件工具包括:

    • wait/synch/mutex/innodb/clone_snapshot_mutex:跟踪克隆快照互斥锁的等待事件,该事件在多个克隆线程之间同步对动态快照对象(在施主和接收者上)的访问。
    • wait/synch/mutex/innodb/clone_sys_mutex:跟踪克隆sys互斥锁的等待事件。MySQL服务器实例中有一个克隆系统对象。此互斥锁同步对供体和收件人上的克隆系统对象的访问。它是由克隆线程以及其他前台和后台线程获取的。
    • wait/synch/mutex/innodb/clone_task_mutex:跟踪克隆任务互斥锁的等待事件,该事件用于克隆任务管理。该clone_task_mutex被克隆的线程收购。
    • wait/io/file/innodb/innodb_clone_file:跟踪克隆所操作的文件的所有I / O等待操作。

    有关监视InnoDB互斥锁等待的信息,请参见“使用性能模式监视InnoDB Mutex等待”。有关一般监视等待事件的信息,请参见“性能模式等待事件表”。

    舞台乐器

    Performance Schema阶段事件跟踪在语句执行过程中发生的步骤。克隆阶段事件工具包括:

    • stage/innodb/clone(file copy):指示克隆操作的文件复制阶段的进度。
    • stage/innodb/clone(redo copy):指示克隆操作的重做复制阶段的进度。
    • stage/innodb/clone(page copy):指示克隆操作的页面复制阶段的进度。

    有关使用阶段事件监视克隆操作的信息,请参阅使用性能模式阶段事件监视克隆操作。有关监视阶段事件的一般信息,请参见“性能模式阶段事件表”。

    声明工具

    性能架构语句事件跟踪语句执行。启动克隆操作时,可以并行执行克隆语句工具跟踪的不同语句类型。您可以在Performance Schema语句事件表中观察这些语句事件。执行的语句数取决于clone_max_concurrencyclone_autotune_concurrency设置。

    克隆语句事件工具包括:

    • statement/abstract/clone:在将任何克隆操作归类为本地,客户端或服务器操作类型之前,跟踪所有克隆操作的语句事件。
    • statement/clone/local:跟踪本地语句操作的克隆语句事件;执行CLONE LOCAL语句时生成。
    • statement/clone/client:跟踪在收件人MySQL服务器实例上发生的远程克隆语句事件;CLONE INSTANCE在收件人上执行语句时生成。
    • statement/clone/server:跟踪在施主MySQL服务器实例上发生的远程克隆语句事件;CLONE INSTANCE在收件人上执行语句时生成。

    有关监视性能模式语句事件的信息,请参见“性能模式语句事件表”。

    记忆仪器

    性能架构内存工具跟踪内存使用情况。克隆内存使用工具包括:

    • memory/innodb/clone:跟踪InnoDB为动态快照分配的内存。
    • memory/clone/dat :跟踪克隆操作期间克隆插件分配的内存。

    有关使用性能模式监视内存使用情况的信息,请参见“内存摘要表”。

    Com_clone状态变量

    Com_clone状态变量提供的计数CLONE语句执行。

    有关更多信息,请参见“服务器状态变量”中有关Com_xxx语句计数器变量的讨论。


    停止克隆操作

    如有必要,您可以使用语句停止克隆操作。KILL QUERY processlist_id

    在接收方MySQL服务器实例上,您可以从表的PID列中检索克隆操作的进程列表标识符(PID)clone_status

    mysql> SELECT * FROM performance_schem .clone_status\G
    
    *************************** 1. row  ***************************
    ID : 1
    PID : 8
    STATE : In Progress
    BEGIN_TIME : 2019-07-15 11 :58 :36.767
    END_TIME : NULL
    SOURCE : LOCAL INSTANCE
    DESTINATION : /path/to/clone_dir/
    ERROR_NO: 0
    ERROR_MESSAGE : 
    BINLOG_FILE : 
    BINLOG_POSITION : 0
    GTID_EXECUTED :
    

    您还可以检索从ProcessList中标识ID的列INFORMATION_SCHEMAPROCESSLIST表中,IdSHOW PROCESSLIST输出,或者PROCESSLIST_ID性能模式的列threads表。这些获取PID信息的方法可以在施主或受主MySQL服务器实例上使用。

    克隆系统变量参考

    表5.5克隆系统变量参考

    名称Cmd线选项文件系统变量状态变量可变范围动态
    clone_autotune_concurrency全球
    clone_buffer_size全球
    clone_ddl_timeout全球
    clone_enable_compression全球
    clone_max_concurrency全球
    clone_max_data_bandwidth全球
    clone_max_network_bandwidth全球
    clone_ssl_c 全球
    clone_ssl_cert全球
    clone_ssl_key全球
    clone_valid_donor_list全球

    克隆系统变量

    本节描述控制克隆插件操作的系统变量。如果启动时指定的值不正确,则克隆插件可能无法正确初始化,并且服务器不会加载它。在这种情况下,服务器也可能会为其他克隆设置生成错误消息,因为它无法识别它们。

    每个系统变量都有一个默认值。可以在服务器启动时使用命令行或选项文件中的选项设置系统变量。可以使用以下SET语句在运行时动态更改它们,该语句使您无需停止并重新启动服务器即可修改服务器的操作。

    设置全局系统变量运行时值通常需要SYSTEM_VARIABLES_ADMINSUPER特权。有关更多信息,请参见“系统变量特权”。

    克隆变量是在执行克隆操作的收件人MySQL服务器实例上配置的。

    • clone_autotune_concurrency

      属性
      命令行格式--clone-autotune-concurrency
      介绍了8.0.17
      系统变量clone_autotune_concurrency
      范围全球
      动态
      SET_VAR提示适用没有
      类型布尔型
      默认值ON

      为远程克隆操作启用线程的动态生成。该设置仅适用于收件人MySQL服务器实例。该clone_max_concurrency变量定义可以产生的最大线程数。

      如果clone_autotune_concurrency禁用,则clone_max_concurrency定义为远程克隆操作生成的实际线程数。

    • clone_buffer_size

      属性
      命令行格式--clone-buffer-size
      介绍了8.0.17
      系统变量clone_buffer_size
      范围全球
      动态
      SET_VAR提示适用没有
      类型整数
      默认值4194304
      最低值1048576
      最大值268435456

      定义在本地克隆操作期间传输数据时使用的中间缓冲区的大小。此设置不适用于远程克隆操作。默认值为4兆字节(MiB)。较大的缓冲区大小可能允许I / O设备驱动程序并行获取数据,从而可以提高克隆性能。

    • clone_ddl_timeout

      属性
      命令行格式--clone-ddl-timeout
      介绍了8.0.17
      系统变量clone_ddl_timeout
      范围全球
      动态
      SET_VAR提示适用没有
      类型整数
      默认值300
      最低值0
      最大值2592000

      执行克隆操作时等待备份锁定的时间(以秒为单位)。此设置适用于施主和受主MySQL服务器实例。克隆操作不能与DDL操作同时运行。施主和受主MySQL服务器实例上需要备份锁。克隆操作等待当前的DDL操作完成。一旦获取了备份锁,DDL操作必须等待克隆操作完成。值为0表示克隆操作将不获取任何备份锁定。在这种情况下,如果同时尝试DDL操作,则克隆操作将失败并显示错误。

    • clone_enable_compression

      属性
      命令行格式--clone-enable-compression
      介绍了8.0.17
      系统变量clone_enable_compression
      范围全球
      动态
      SET_VAR提示适用没有
      类型布尔型
      默认值OFF

      在远程克隆操作期间在网络层启用数据压缩。压缩以节省CPU成本的方式节省了网络带宽。启用压缩可以提高数据传输速率。此设置仅适用于收件人MySQL服务器实例。

    • clone_max_concurrency

      属性
      命令行格式--clone-max-concurrency
      介绍了8.0.17
      系统变量clone_max_concurrency
      范围全球
      动态
      SET_VAR提示适用没有
      类型整数
      默认值16
      最低值1
      最大值128

      定义远程克隆操作的最大并发线程数。默认值为16。更多线程可以提高克隆性能,但也可以减少允许的并发客户端连接数,这可能会影响现有客户端连接的性能。此设置仅适用于收件人MySQL服务器实例。

      如果clone_autotune_concurrency启用(默认值),clone_max_concurrency则是可以为远程克隆操作动态产生的最大线程数。如果clone_autotune_concurrency禁用,则clone_max_concurrency定义为远程克隆操作生成的实际线程数。

      对于远程克隆操作,建议每个线程的最小数据传输速率为1兆字节(MiB)。远程克隆操作的数据传输速率由clone_max_data_bandwidth变量控制。

    • clone_max_data_bandwidth

      属性
      命令行格式--clone-max-data-bandwidth
      介绍了8.0.17
      系统变量clone_max_data_bandwidth
      范围全球
      动态
      SET_VAR提示适用没有
      类型整数
      默认值0
      最低值0
      最大值1048576

      定义远程克隆操作的最大数据传输速率,以每秒兆字节(MiB)为单位。此变量有助于管理克隆操作的性能影响。仅当施主磁盘I / O带宽饱和而影响性能时,才应设置限制。值0表示“无限制”,它允许克隆操作以尽可能高的数据传输速率运行。此设置仅适用于收件人MySQL服务器实例。

      每个线程的最小数据传输速率为每秒1 MiB。例如,如果有8个线程,则最小传输速率为每秒8 MiB。该clone_max_concurrency变量控制为远程克隆操作生成的最大线程数。

      指定的请求数据传输速率clone_max_data_bandwidth可能与表中DATA_SPEED列所报告的实际数据传输速率不同performance_schema.clone_progress。如果克隆操作未达到所需的数据传输速率,并且您有可用的带宽,请检查接收者和捐助者上的I / O使用情况。如果存在未充分利用的带宽,则I / O是下一个最可能出现的瓶颈。

    • clone_max_network_bandwidth

      属性
      命令行格式--clone-max-network-bandwidth
      介绍了8.0.17
      系统变量clone_max_network_bandwidth
      范围全球
      动态
      SET_VAR提示适用没有
      类型整数
      默认值0
      最低值0
      最大值1048576

      指定远程克隆操作的最大近似网络传输速率,以每秒兆字节(MiB)为单位。此变量可用于管理克隆操作对网络带宽的性能影响。仅当网络带宽饱和时才应设置此参数,这会影响施主实例的性能。值0表示“无限制”,它允许在网络上以尽可能高的数据传输速率进行克隆,从而提供最佳性能。此设置仅适用于收件人MySQL服务器实例。

    • clone_ssl_c

      属性
      命令行格式--clone-ssl-ca=file_name
      介绍了8.0.14
      系统变量clone_ssl_c
      范围全球
      动态
      SET_VAR提示适用没有
      类型文件名
      默认值empty string

      指定证书颁发机构(CA)文件的路径。用于为远程克隆操作配置加密连接。此设置在接收者上配置,并在连接到捐赠者时使用。

    • clone_ssl_cert

      属性
      命令行格式--clone-ssl-cert=file_name
      介绍了8.0.14
      系统变量clone_ssl_cert
      范围全球
      动态
      SET_VAR提示适用没有
      类型文件名
      默认值empty string

      指定公钥证书的路径。用于为远程克隆操作配置加密连接。此设置在接收者上配置,并在连接到捐赠者时使用。

    • clone_ssl_key

      属性
      命令行格式--clone-ssl-key=file_name
      介绍了8.0.14
      系统变量clone_ssl_key
      范围全球
      动态
      SET_VAR提示适用没有
      类型文件名
      默认值empty string

      指定私钥文件的路径。用于为远程克隆操作配置加密连接。此设置在接收者上配置,并在连接到捐赠者时使用。

    • clone_valid_donor_list

      属性
      命令行格式--clone-valid-donor-list=value
      介绍了8.0.17
      系统变量clone_valid_donor_list
      范围全球
      动态
      SET_VAR提示适用没有
      类型
      默认值NULL

      定义用于远程克隆操作的有效施主主机地址。此设置适用于收件人MySQL服务器实例。允许使用逗号分隔的值列表,格式如下:“HOST1:PORT1,HOST2:PORT2,HOST3:PORT3”。不允许使用空格。

      clone_valid_donor_list变量通过提供对克隆数据源的控制来增加一层安全性。配置所需clone_valid_donor_list的特权与执行远程克隆操作所需的特权不同,后者允许将这些职责分配给不同的角色。配置clone_valid_donor_list需要SYSTEM_VARIABLES_ADMIN特权,而执行远程克隆操作则需要CLONE_ADMIN特权。

      不支持Internet协议版本6(IPv6)地址格式。不支持Internet协议版本6(IPv6)地址格式。可以代替使用IPv6地址的别名。IPv4地址可以按原样使用。

    克隆插件限制

    克隆插件受以下限制:

    • TRUNCATE TABLE克隆操作期间不允许使用 DDL(包括)。选择数据源时应考虑此限制。一种解决方法是使用专用的施主实例,该实例可以适应在克隆数据时被阻止的DDL操作。允许并发DML。
    • 无法从其他MySQL服务器版本克隆实例。施主和受主必须具有相同的MySQL服务器版本。例如,您不能在MySQL 5.7和MySQL 8.0之间进行克隆。仅MySQL 8.0.17及更高版本支持clone插件。
    • 一次只能克隆一个MySQL实例。不支持在单个克隆操作中克隆多个MySQL实例。
    • mysqlx_port远程克隆操作(在CLONE INSTANCE语句中指定施主MySQL服务器实例的端口号时)不支持指定的X协议端口。
    • clone插件不支持MySQL服务器配置的克隆。接收方MySQL服务器实例保留其配置,包括持久的系统变量设置(请参见“持久的系统变量”。)
    • clone插件不支持二进制日志的克隆。
    • clone插件仅克隆存储在中的数据InnoDB。其他存储引擎数据未克隆。MyISAMCSV存储在任何架构,包括表sys架构中克隆为空表。
    • 不支持通过MySQL路由器连接到施主MySQL服务器实例。
    • 本地克隆操作不支持克隆使用绝对路径创建的常规表空间。与源表空间文件具有相同路径的克隆表空间文件将导致冲突。