MySQL 8.0 的克隆插件 (Clone Plugin) 是一项从 MySQL 8.0.17 版本开始引入的强大功能,它允许你便捷地创建本地或远程MySQL实例数据的物理快照。本文将详细介绍其用途、使用方法、限制以及应用场景。
1. 克隆插件简介
克隆插件用于创建MySQL实例的物理快照。这个快照包含了存储在InnoDB中的完整数据目录,如表、表空间、数据字典元数据等,使得克隆后的数据立即可用。它主要支持两种模式:
两者的对比如下:
特性 | 本地克隆 | 远程克隆 |
|---|---|---|
数据源 | 本地MySQL实例 | 远程MySQL实例 (捐赠者) |
目标位置 | 同一服务器上的指定目录 | 接受者实例的数据目录或指定目录 |
主要权限 | BACKUP_ADMIN | 捐赠者需BACKUP_ADMIN,接受者需CLONE_ADMIN |
网络要求 | 无 | 捐赠者与接受者之间网络可达 |
2. 如何使用克隆插件
2.1 安装插件
首先,需要在MySQL实例上安装克隆插件。你可以通过SQL语句动态安装,或将其配置为随服务器启动自动加载。
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';
Empty set (0.19 sec)
mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
Query OK, 0 rows affected (0.14 sec)
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| clone | ACTIVE |
+-------------+---------------+
1 row in set (0.01 sec)
若希望插件永久生效,可在my.cnf配置文件中添加:
[mysqld]
plugin-load-add=mysql_clone.so
clone=FORCE_PLUS_PERMANENT2.2 配置用户权限
执行克隆操作需要特定的权限,本地复制和远程复制权限不同:
GRANT BACKUP_ADMIN ON *.* TO 'clone_user';-- 在捐赠者上执行
CREATE USER 'donor_user'@'%' IDENTIFIED BY 'password';
GRANT BACKUP_ADMIN ON *.* TO 'donor_user'@'%';
-- 在接受者上执行
CREATE USER 'recipient_user'@'%' IDENTIFIED BY 'password';
GRANT CLONE_ADMIN ON *.* TO 'recipient_user'@'%';2.3 执行克隆操作
1) 本地克隆示例:
CLONE LOCAL DATA DIRECTORY = '/path/to/clone_dir'; /path/to/clone_dir必须是绝对路径,且该目录不能已存在,但其父目录必须存在。
例如:
先创建目录
mkdir -p /data/mysql/mysql3309
chown -R mysql:mysql /data/mysql/mysql3309/data/mysql/mysql3309/data必须是绝对路径,且该目录不能已存在,但其父目录(/data/mysql/mysql3309)必须存在。
执行克隆
CLONE LOCAL DATA DIRECTORY = '/data/mysql/mysql3309/data'; 
克隆完毕后可见已经生成数据目录

2) 远程克隆示例:
在接受者实例上执行以下命令:
-- 首先,设置有效的捐赠者列表
SET GLOBAL clone_valid_donor_list = 'donor_host_ip:3306';
-- 然后,执行远程克隆
CLONE INSTANCE FROM 'donor_user'@'donor_host_ip':3306 IDENTIFIED BY 'password';远程克隆操作完成后,接受者MySQL实例通常会自动重启。
2.4 监控克隆操作
如果库比较大,可以通过查询performance_schema中的相关表来监控克隆进度和状态。
-- 查看克隆进度
SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
-- 查看克隆最终状态
SELECT * FROM performance_schema.clone_status;3. 注意事项
使用克隆插件时,需要注意以下限制:
4. 总结
MySQL 8.0的克隆插件是一个功能强大且高效的数据库克隆工具,主要应用场景: