一、Clone Plugin 插件介绍
特点:
1、Clone Plugin 是 MySQL 8.0.17 版本推出一个插件,用于进行数据库的物理备份。
2、 Clone Plugin 只备份 InnoDB 存储引擎表,其他类型表不进行备份。
架构:
从上图可以发现,Clone Plugin 很不同的一点是 redo copy 的过程非常短,不需要备份30分钟内所产生的所有 redo log。
1、这意味着通过 Clone Plugin 恢复物理备份的速度要远远快于 Xtrabackup 。
2、在 redo copy 前有一个 page copy,这是 Xtrabackup 所没有的步骤。
3、也就是在备份完 InnoDB 磁盘文件后,Clone Plugin 还会对 Buffer Pool 中的脏页进行备份,这样就可以减少对于 redo 日志的拷贝。
4、脏页的备份会先对(space,page_no)排序,以比较顺序的方式写入备份文件。
5、同时,为了记录在拷贝脏页过程中,又有新的变化产生,所以在 file copy 后启用 page tracking 的机制,记录当前已经 Checkpoint 完成的 LSN。
6、后续的redo copy 只需要拷贝该 LSN 之后的重做日志即可。
总结
优点:
对比 Xtrabackup,Clone Plugin 额外实现了以下几个功能:
-
page copy:拷贝脏页,减少重做日志的备份量,提升恢复速度;
-
page tracking:记录 LSN 的变化,用于后续重做日志的备份;
-
redo archiving:备份重做日志,避免重做日志文件写入太快,覆盖写入无法备份的场景,这点Xtrabackup就无能为力了;
4.Clone Plugin 的一大优势是远程备份。
缺点:
1.进行远程克隆的两个 MySQL 实例版本号必须完全一样。5.7 和 8.0 显然不行,8.0.19 和 8.0.20 小版本不同也不行。
2.MySQL 8.0.27 版本前不允许 DDL 操作,DDL 操作会被阻塞,甚至影响后续的 SELECT查询操作;MySQL 8.0.27 版本已经可以在备份过程中进行并发的 DDL 操作。(由clone_block_ddl参数控制)
3.Clone Plugin 不备份 MySQL 配置文件,而 Xtrabackup 是备份的。
4.克隆插件不支持克隆二进制日志。
5.不支持连接中间件(VIP)地址
二、安装clone插件
1、数据库里面执行加载clone插件
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
2、配置文件里面添加
[mysqld]
plugin-load-add=mysql_clone.so
3、检查插件状态
SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME = 'clone';
三、克隆数据
1、本地克隆
克隆用户需要有的权限 BACKUP_ADMIN
GRANT BACKUP_ADMIN ON *.* TO 'clone_user';
创建数据库的用户有权限写到的宿主机目录
CLONE LOCAL DATA DIRECTORY = '/tmp/cs'; #cs是自定义的目录
基于克隆数据恢复数据库(启动的时候指定数据目录 clone插件不会clone 配置文件)
mysqld_safe --datadir=/tmp/cs
2、远程克隆
目标端执行
set global clone_valid_donor_list='IP:端口'; #集群对应灾备库ip:端口
clone instance from 用户名@IP:端口 identified by '密码';
远程克隆到某个目录
CLONE INSTANCE FROM '用户'@'':端口
IDENTIFIED BY '密码'
DATA DIRECTORY = '/tmp/cs'; #cs是自定义的目录
远程克隆直接库里面执行
SET GLOBAL clone_valid_donor_list = ‘245.0.2.99:3306’;
set global super_read_only=off ;
CLONE INSTANCE FROM ‘root’@‘245.0.2.99’:3306 IDENTIFIED BY ‘l@fZc1dCbeikqcp0’ ;
加密传输方式
修改参数
clone_ssl_ca=/path/to/ca.pem
clone_ssl_cert=/path/to/client-cert.pem
clone_ssl_key=/path/to/client-key.pem
使用ssl
mysql> CLONE INSTANCE FROM 'user'@'example.donor.host.com':3306
IDENTIFIED BY 'password'
DATA DIRECTORY = '/path/to/clone_dir'
REQUIRE SSL;
四、报错
如果克隆报错了查看错误返回
SELECT STATE, ERROR_NO, ERROR_MESSAGE FROM performance_schema.clone_status;
参数
clone_max_concurrency # 变量定义可以使用的最大线程数产生。
clone-block-ddl #开启后clone期间源端独占ddl锁
clone-buffer-size #clone期间使用的最大内存,默认值为4MB。
clone-ddl-timeout #clone期间是否要等待获取ddl锁,设置为0表示不等待。(遇到锁报错退出)
clone-donor-timeout-after-network-failure #定义源端多长时间要重新连接并重新启动克隆操作。(备份失败后多少分钟重试)
clone-enable-compression #在网络层启用数据压缩 远程克隆操作。
clone-max-concurrency #定义远程连接最大能用的线程数量。
clone-max-data-bandwidth #定义单个线程每秒传输数据传输速率(单位 MB 0表示不限制)。
clone-max-network-bandwidth #定义最大网络使用情况,每秒多少MB。
clone-ssl-ca=file_name #指定证书颁发机构 (CA) 文件的路径。
clone-ssl-cert=file_name #指定公钥证书的路径。
clone-ssl-key=file_name #指定私钥文件的路径。
clone-valid-donor-list=value #目标端修改,填写源端的地址IP。