前言
在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)
参考文档:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-local.html
克隆操作需要用户具备backup_admin权限:
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路径具备读写权限
这里为克隆结果
二.远程克隆(clone remote data)
参考文档:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-remote.html
远程克隆前置条件:
- 克隆接收方和提供方均需要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
操作案例:
具体的克隆流程可以查看performance_schema.clone_progress:
SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
指定DATA DIRECTORY参数则不会开启RESTART和RECOVERY步骤。
总结:
目前调研来看,新引入的clone plugin和xtrabackup都可以用于物理热备,不过各有优劣势,在部分场景可以考虑使用clone替代xtrabackup,如主从复制和mgr等等。可以期待官方后续clone plugin相关的更新。后续会再了解一下clone plugin和xtrabackup的原理。
END
————————————————————
更多技术文章欢迎关注微信公众号:数据库笔记