Mysql 8.0 克隆远程数据

克隆插件支持以下语法克隆远程数据;也就是说,从远程MySQL服务器实例(捐赠方)克隆数据,并将其传输到启动克隆操作的MySQL实例(接收方)。

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

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

条件:

  • user是捐赠者 MySQL 服务器实例上的克隆用户。

  • passworduser 密码。

  • host是 hostname捐赠者 MySQL 服务器实例的地址。不支持 Internet 协议版本 6 (IPv6) 地址格式。可以改为使用 IPv6 地址的别名。IPv4 地址可以按原样使用。

  • port是 port捐赠者 MySQL 服务器实例的数量。(不支持指定的 X 协议端口 mysqlx_port。也不支持通过 MySQL Router 连接到供体 MySQL 服务器实例。)

  • DATA DIRECTORY [=] 'clone_dir'是一个可选子句,用于指定要克隆的数据的收件人目录。如果您不想从收件人数据目录中删除现有的用户创建的数据(模式、表、表空间)和二进制日志,请使用此选项。需要绝对路径,并且该目录不能存在。MySQL 服务器必须具有创建目录所需的写入权限。

    当未使用可选子句时,克隆操作会从接收方数据目录中删除用户创建的数据(模式、表、表空间)和二进制日志,将新数据克隆到接收方数据目录,然后自动重新启动服务器。 DATA DIRECTORY [=] 'clone_dir'

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

笔记

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

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

默认情况下,InnoDB系统表空间、重做日志和撤消表空间被克隆到施主上配置的相同位置(分别由 innodb_data_home_dir和 innodb_data_file_path、 innodb_log_group_home_dir和定义innodb_undo_directory)。如果指定了该子句,则将那些表空间和日志克隆到指定目录。 DATA DIRECTORY [=] 'clone_dir'

远程克隆先决条件

要执行克隆操作,克隆插件必须在捐赠者和接受者 MySQL 服务器实例上都处于活动状态。有关安装说明,请参阅 第 5.6.7.1 节,“安装克隆插件”

执行克隆操作需要捐助者和接收者上的 MySQL 用户(“克隆用户”)。

  • 在捐赠者上,克隆用户需要 BACKUP_ADMIN访问和传输来自捐赠者的数据的权限,并在克隆操作期间阻止并发 DDL。克隆操作期间的并发 DDL 在 MySQL 8.0.27 之前的供体上被阻止。从 MySQL 8.0.27 开始,默认情况下,捐助者上允许并发 DDL。请参阅 第 5.6.7.4 节,“克隆和并发 DDL”

  • 在收件人上,克隆用户需要 CLONE_ADMIN替换收件人数据、在克隆操作期间阻止收件人上的 DDL 以及自动重新启动服务器的权限。CLONE_ADMIN 特权包括 BACKUP_ADMIN和 SHUTDOWN隐含 的特权。

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

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

  • MYSQL 8.0.17 及更高版本支持克隆插件。捐赠者和接受者必须是相同的 MySQL 服务器版本和发行版。要确定 MySQL 服务器版本和发行版,请发出以下查询:

    mysql> SHOW VARIABLES LIKE 'version';
     +---------------+--------+
    | Variable_name | Value  |
    +---------------+--------+
    | version       | 8.0.17 |
    +---------------+--------+

    从 MySQL 8.0.26 开始,支持从供体 MySQL 服务器实例克隆到相同版本和发行版的修补程序 MySQL 服务器实例。

  • 捐赠者和接受者 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 服务器字符集和排序规则配置的信息,请参阅 第 10.15 节,“字符集配置”

  • 捐赠者和接受者需要相同innodb_page_size 和innodb_data_file_path 设置。捐赠者和接受者的 innodb_data_file_path 设置必须指定相同数量的同等大小的数据文件。SHOW VARIABLES您可以使用语法 检查变量设置。

    mysql> SHOW VARIABLES LIKE 'innodb_page_size';
    
    mysql>SHOW  VARIABLES LIKE 'innodb_data_file_path';
  • 如果克隆加密或页面压缩的数据,捐赠者和接受者必须具有相同的文件系统块大小。对于页面压缩数据,收件人文件系统必须支持稀疏文件和打孔,以便在收件人上进行打孔。有关这些功能以及如何识别使用它们的表和表空间的信息,请参阅 第 5.6.7.5 节,“克隆加密数据”和 第 5.6.7.6 节,“克隆压缩数据”。要确定您的文件系统块大小,请参阅您的操作系统文档。

  • 如果要克隆加密数据,则需要安全连接。请参阅 为克隆配置加密连接

  • 接收者的 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 开始,如果在克隆操作期间遇到重复的 undo 表空间文件名,则会报告错误。在 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';

    有关删除和添加撤消表空间文件的信息,请参阅第 15.6.3.4 节,“撤消表空间”

  • 默认情况下,克隆数据后,接收方 MySQL 服务器实例会自动重新启动(停止和启动)。要发生自动重启,接收方必须有一个监控进程来检测服务器关闭。否则,在克隆数据后,克隆操作将停止并出现以下错误,并且接收 MySQL 服务器实例将关闭:

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

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

  • 几个变量控制远程克隆操作的各个方面。在执行远程克隆操作之前,请查看变量并根据需要调整设置以适应您的计算环境。克隆变量在执行克隆操作的接收 MySQL 服务器实例上设置。请参阅 第 5.6.7.13 节,“克隆系统变量”

克隆远程数据

以下示例演示了克隆远程数据。默认情况下,远程克隆操作会删除收件人上用户创建的数据(模式、表、表空间)和二进制日志,将新数据克隆到收件人数据目录,然后重新启动 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. 以您之前创建的克隆用户身份登录到接收 MySQL 服务器实例 ( recipient_clone_user'@'example.recipient.host.com) 并执行该 CLONE INSTANCE语句。

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

    数据克隆完成后,接收方的 MySQL 服务器实例会自动重启。

    有关监视克隆操作状态和进度的信息,请参阅 第 5.6.7.10 节,“监视克隆操作”

克隆到命名目录

默认情况下,远程克隆操作会在从捐赠者 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 服务器,则必须手动执行此操作:

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

where/path/to/clone_dir是收件人指定目录的路径。

为克隆配置加密连接

您可以为远程克隆操作配置加密连接,以在通过网络克隆数据时保护数据。克隆加密数据时,默认需要加密连接。(请参阅 第 5.6.7.5 节,“克隆加密数据”。)

以下说明描述了如何配置接收 MySQL 服务器实例以使用加密连接。假设捐赠者 MySQL 服务器实例已配置为使用加密连接。如果没有,请参阅第 6.3.1 节,“配置 MySQL 以使用加密连接”以获取服务器端配置说明。

要将接收方 MySQL 服务器实例配置为使用加密连接:

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

    • ca.pem

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

    • client-cert.pem

      客户端公钥证书文件。

    • client-key.pem

      客户端私钥文件。

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

    例如:

    clone_ssl_ca=/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如果您尝试克隆加密数据, 使用会导致错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值