5.clone plugin(克隆插件)的限制

发布时间 2023-04-01 22:20:43作者: 站在巨人的肩上Z

1.在使用 Clone Plugin 时,注意以下限制:

克隆期间,会阻塞 DDL 。同样,DDL 也会阻塞克隆命令的执行。不过从  MySQL 8.0.27 开始,克隆命令不会阻塞 Donor 上的 DDL 。

  • Clone Plugin 不会拷贝 Donor 的配置参数。
  • Clone Plugin 不会拷贝 Donor 的 Binlog。
  • Clone Plugin 只会拷贝 InnoDB 表的数据,对于其它存储引擎的表,只会拷贝表结构。
  • Donor 实例中如果有表通过 DATA DIRECTORY 子句设置了绝对路径,在进行本地克隆时,会提示文件已存在。在进行远程克隆时,绝对路径必须存在且有可写权限。
  • 不允许通过 MySQL Router 连接 Donor 实例。
  • 执行 CLONE INSTANCE 操作时,指定的 Donor 端口不能为 X Protocol 端口。

除此之外,在进行远程克隆时,还有如下要求:

  • MySQL 版本(包括小版本)必须一致。

  • 主机的操作系统和位数(32 位,64 位)必须一致。两者可基于参数 version_compile_os,version_compile_machine 获取。

  • Recipient 必须有足够的磁盘空间存储克隆数据。

  • 字符集相关参数必须一致,具体包括:character_set_server(字符集),collation_server(校验集)和 character_set_filesystem。

  • 参数 innodb_page_size 必须一致。

  • 无论是 Donor ,还是 Recipient ,同一时间,只能执行一个克隆操作。

  • Recipient 需要重启,所以其必须通过 mysqld_safe 或 systemd 等进程管理工具进行管理,否则的话,实例关闭后,需手动拉起。

2.clone plugin与xtrabackup的异同

下面看看 Clone Plugin 和 XtraBackup 的异同点:

  • 在实现上,两者都有 FILE COPY 和 REDO COPY 阶段,但 Clone Plugin 比 XtraBackup 多了一个 PAGE COPY 阶段。由此带来的好处是,Clone Plugin 的恢复速度比XtraBackup 快。
  • XtraBackup 没有 Redo Archiving 特性,有可能出现未拷贝的 Redo 日志被覆盖的情况。
  • GTID 下建立复制, Clone Plugin 无需额外执行 SET GLOBAL GTID_PURGED 操作。

3.clone plugin的参数解析

  • clone_autotune_concurrency

  是否自动调节克隆过程中并发线程数的数量,默认为 ON ,此时,最大线程数由参数 clone_max_concurrency  控制。若设置为 OFF ,并发线程数将是固定的,等于 clone_max_concurrency 。后者的默认值为 16 。

  • clone_block_ddl

  克隆过程中是否对 Donor 实例加备份锁。如果加了,则会阻塞 DDL。默认为 OFF,不加。该参数是 MySQL 8.0.27 引入的。

  • clone_delay_after_data_drop

Drop 完用户表空间,等待多久才执行数据拷贝操作。引入该参数的初衷是某些文件系统(如 VxFS)是异步释放空间的。如果 Drop 完用户表空间,就马上执行数据拷贝操作,有可能会因为空间不足而导致克隆失败。该参数是 MySQL 8.0.29 引入的,默认为 0,不等待。

  • clone_buffer_size

  本地克隆时,中转缓冲区的大小,默认 4M 。缓冲区越大,备份速度越快,相应地,对磁盘 IO 的压力也越大。

  • clone_ddl_timeout

  克隆操作需要获取备份锁。在执行 CLONE 命令时,如果有 DDL 正在执行,则 CLONE 命令会被阻塞,等待获取备份锁(Waiting for backup lock)。等待的最大时长由 Recipient 实例上的 clone_ddl_timeout 决定,该参数默认为 300s。如果在这个时间内还没获取到备份锁,CLONE 命令会失败,且提示 ERROR 3862 (HY000): Clone Donor Error: 1205 : Lock wait timeout exceeded; try restarting transaction.需要注意的是,在执行 DDL 时,如果有 CLONE 命令在执行,DDL 同样也会因为备份锁而阻塞,只不过,DDL 操作的等待时长由lock_wait_timeout 决定,该参数默认为 31536000s,即 365 天。

  • clone_donor_timeout_after_network_failure

  远程克隆时,如果出现了网络错误,克隆操作不会马上终止,而是会等待一段时间。如果在这个时间内,网络恢复了,操作会继续进行。在 MySQL 8.0.24 之前,等待时间是固定的 5 min。从 MySQL 8.0.24 开始,可通过 clone_donor_timeout_after_network_failure 设置这个时间,默认是 5 min。

  • clone_enable_compression

  远程克隆传输数据时,是否开启压缩。默认为 OFF 。开启压缩能节省网络带宽,但相应地,会增加 CPU 消耗。

  • clone_max_data_bandwidth

远程克隆时,可允许的最大数据拷贝速率,单位 MB/s 。默认为 0,不限制。如果 Donor 的磁盘 IO 存在瓶颈,可通过该参数来限速。

注意,这里限制的只是单个线程的拷贝速率。如果是多个线程并行拷贝,实际最大拷贝速率 = clone_max_data_bandwidth * 线程数。

  • clone_max_network_bandwidth

远程克隆时,可允许的最大网络传输速率,单位 MiB/s 。默认为 0,不限制。如果网络带宽存在瓶颈,可通过该参数来限速。

  • clone_valid_donor_list

在 Recipient 上设置 Donor 白名单,Recipient 只能克隆白名单中指定的实例。在执行克隆操作之前,必须设置该参数。

  • clone_ssl_ca,clone_ssl_cert,clone_ssl_key

     SSL 相关。