MySQL8.0 clone插件

本文为墨天轮数据库管理服务团队第 188 期技术分享,作者孙文龙,原创内容,如需转载请联系小墨(VX:modb666)并注明来源。
定 义
1、安装插件
[mysqld]plugin-load-add=mysql_clone.so
mysql > install plugin clone soname 'mysql_clone.so';
2、本地克隆
mysql>createuser clone_user identified by'xxxx';mysql>GRANT BACKUP_ADMIN ON*.*TO'clone_user';mysql> CLONE LOCAL DATA DIRECTORY ='/data4/clone_test/recipient';

3、远程克隆
-
mysql8.0.17开始支持clone插件,在8.0.37版本之前, Donor 实例和Recipient 实例 版本号必须一致, 包括小版本号。从8.0.37开始支持不同小版本之间使用clone插件。以前的限制仍然适用于早于8.0.37的版本。例如,不允许在8.0.36和8.0.42版本之间克隆 -
Donor 实例和Recipient 必须运行在同样的操作系统和硬件平台上。例如,如果Donor实例在Linux 64位平台上运行,则recipient方实例也必须在该平台上运行 -
recipient 实例 必须有足够的空间 -
如果Donor实例在data_dir 目录额外创建了表空间, 则克隆操作必须能通过全路径访问到这些表空间文件。Recipient 上必须有相同的路径。这些表空间可以通过查询Information Schema.FILES表进行确认 -
Donor上安装且激活了的插件, 也必须在Recipient 上激活 -
Recipient 必须保持和Donor相同的字符集和排序规则 -
Recipient中的 innodb_page_size 和 innodb_data_file_path 配置项必须和Donor相同 -
对于Donor来说, 同时只能有一个克隆操作在执行,可以通过查询information_scheme.clone_status 表来确认 -
克隆插件将会以1MB大小的数据包传递数据, 因此Donor和 Recipient 的max_allowed_packet 参数需要设置为2MB以上 -
确保Donor上的undo表空间文件名是唯一的
mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILESWHERE FILE_TYPE LIKE ‘UNDO LOG’;
-
远程克隆完成之后,Recipient 实例进程将被尝试重启, 所以其必须通过 mysqld_safe 或 systemd 等进程管理工具进行管理,否则的话,实例关闭后,需手动拉起
mysql>CREATEUSER donor_clone_user IDENTIFIED BY'xxxx';mysql>GRANT BACKUP_ADMIN on*.*to donor_clone_user;
mysql>CREATEUSER recipient_clone_user IDENTIFIED BY'xxxxx';mysql>GRANT CLONE_ADMIN on*.*to recipient_clone_user;mysql>SETGLOBAL clone_valid_donor_list ='192.168.1.10:3306';-- 使用创建的recipient_clone_user 用户从新登陆数据库, 执行克隆操作mysql> CLONE INSTANCE FROM donor_clone_user@192.168.1.10:3306IDENTIFIED BY'xxxx '

mysql> CLONE INSTANCE FROM donor_clone_user@192.168.1.10:3306IDENTIFIED BY'xxxx ' DATA DIRECTORY ='/data4/clone_test/recipient';
-
获取备份锁 (Backup Lock)。备份锁和 DDL 互斥。注意,获取的不仅仅的是 Recipient 上的备份锁,Donor 上的同样也要获取。 -
Drop 用户表空间。注意,Drop 的只是用户表空间,不是数据目录,也不包括 ib_buffer_pool、ibdata 等系统文件。 -
从 Donor 实例拷贝数据。对于用户表空间,会直接拷贝。对于系统文件 ,则会重命名为 xxx.#clone,不会直接替代原文件。如

-
重启实例。在启动的过程中,会用 xxx.#clone 替换掉原来的系统文件。




4、启动数据库
$> mysqld_safe --defaults-file=/etc/my.cnf
5、克隆插件的限制
-
克隆期间,会阻塞 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 端口。
THE END

墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。
服务官网:https://www.modb.pro/service

点击进入服务团队主页
夜雨聆风
