前言

在MySQL 8.0.17版本中引入了新的插件clone plugin。克隆插件允许克隆本地或远程MySQL服务器实例中的数据。克隆数据是存储在InnoDB中的数据的物理快照,包括模式、表、表空间和数据字典元数据。克隆的数据包括一个功能完整的数据目录,它允许使用克隆插件用于MySQL服务器配置。clone plugin的可应用场景:

1.数据物理热备:(本地 or 远程)

2.快速构建集群从节点的复制

3.MGR节点的快速扩充

首先需要安装clone plugin:(远程克隆需要在多个节点同步安装)

如果mysqld服务尚未启动,则在my.cnf中配置初始化插件加载:

[mysqld]

plugin-load-add=mysql_clone.so

或者在mysql运行时加载插件,则通过:

INSTALL PLUGIN clone SONAME 'mysql_clone.so';

一.本地克隆(clone data locally)

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

本地克隆语法:

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

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

案例:

mysql > CLONE LOCAL DATA DIRECTORY = '/mysql/bak'

这里指定了不存在的路径/mysql/bak,且/mysql路径具备读写权限

p1.png

这里为克隆结果

二.远程克隆(clone remote data)

远程克隆前置条件:

克隆接收方和提供方均需要clone user,在提供方上,克隆用户需要BACKUP_ADMIN权限来访问和传输来自提供方的数据,以及在克隆操作期间阻止DDL。在接收方上,克隆用户需要CLONE_ADMIN特权来替换接收方数据、在克隆操作期间阻止DDL以及自动重新启动服务器。CLONE_ADMIN特权隐含地包括BACKUP_ADMIN和SHUTDOWN特权。

克隆操作期间不允许使用 DDL,允许并发DML

克隆接收方和提供方必须有相同的mysql server版本,且必须8.0.17+

克隆接收方和提供方必须是相同的操作系统平台。

接收方必须有足够的磁盘空间存放克隆的数据。默认情况下,在克隆提供数据之前会删除接收方数据,因此只需要足够的空间来存储克隆数据。如果使用DATA directory子句克隆到一个指定目录,则必须有足够的磁盘空间用于现有的接收方数据和克隆的数据。

InnoDB允许在数据目录之外创建一些表空间类型。如果提供的MySQL服务器实例有位于数据目录之外的表空间,克隆操作必须能够访问这些表空间

克隆接收方和提供方必须具有相同的字符集和collation字符排序规则

克隆接收方和提供方必须具有相同的innodb_page_size和innodb_data_file_path参数设置

如果克隆加密或页面压缩的数据,则提供方和接收方必须具有相同的文件系统块大小

如果要克隆加密的数据,则需要配置SSL加密安全连接

克隆接收方的clone_valid_donor_list设置必须包含提供方MySQL服务器实例的主机地址

同一时间只能有一个克隆操作

克隆插件传输1MB包和元数据。因此,在提供方和接收方MySQL服务器实例上,所需的最小max_allowed_packet值为2MB

克隆接收方也需要启动mysqld服务

远程克隆需要在接收方创建具备clone admin权限的clone user:

mysql> GRANT CLONE_ADMIN on *.* to 'recipient_clone_user';

添加克隆提供方的ip列表与端口至clone_valid_donor_list

SET GLOBAL clone_valid_donor_list = 'example.donor.host.com:3306';

远程克隆至指定位置:(不会影响本实例)

CLONE INSTANCE FROM 'user'@'host':port

IDENTIFIED BY 'password'

[DATA DIRECTORY [=] 'clone_dir']

[REQUIRE [NO] SSL];

远程克隆覆盖自身:(默认方式,提供方数据直接克隆到接收方,克隆后接收方实例重启)

mysql> CLONE INSTANCE FROM 'donor_clone_user'@'example.donor.host.com':3306

IDENTIFIED BY 'password';

donor_clone_user:克隆提供方user

操作案例:

p2.png

具体的克隆流程可以查看performance_schema.clone_progress:

SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;

p3.png

指定DATA DIRECTORY参数则不会开启RESTART和RECOVERY步骤。

总结:

目前调研来看,新引入的clone plugin和xtrabackup都可以用于物理热备,不过各有优劣势,在部分场景可以考虑使用clone替代xtrabackup,如主从复制和mgr等等。可以期待官方后续clone plugin相关的更新。后续会再了解一下clone plugin和xtrabackup的原理。

END

————————————————————