mysql clone plugin 默认禁用,需手动安装并配置永久生效;远程克隆要求源目版本一致、目标目录为空、双方插件激活且权限正确(源端backup_admin、目标端clone_admin),并配置clone_valid_donor_list。

MySQL Clone Plugin 能实现快速迁移,但“快速”取决于数据量和配置——GB级实例确实可秒级完成,TB级则需数分钟到十几分钟,卡顿几乎都出在插件未加载、权限错配或目录权限/空间不足上。
确认 clone 插件已永久激活且状态为 ACTIVE
很多失败根本没走到克隆阶段,卡在 ERROR 1126 (HY000): Can't open shared library 'mysql_clone.so' 或更模糊的 Unknown command 'CLONE'。这不是权限问题,是插件压根没加载。
- 登录后第一件事:运行
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';,结果必须是ACTIVE - 动态执行
INSTALL PLUGIN clone SONAME 'mysql_clone.so';只是临时生效,MySQL 重启即失效 - 必须在
my.cnf的[mysqld]段添加两行:plugin-load-add = mysql_clone.so和clone = FORCE_PLUS_PERMANENT(Linux 下文件名是mysql_clone.so,Windows 是mysql_clone.dll) - 改完配置必须
systemctl restart mysqld,reload不触发插件重载
本地克隆失败?90% 是目录权限或磁盘空间问题
CLONE LOCAL DATA DIRECTORY 不是“复制到已有目录”,而是清空目标路径、重建整个数据目录结构。哪怕路径下只有一行 .keep 文件,也会失败。
- 目标路径必须不存在:
/data/clone_20260608,不能是/data/mysql或/data/clone_20260608/(末尾斜杠不关键,但路径不能已存在) - 创建后立即执行:
chown -R mysql:mysql /data/clone_20260608,只改父目录属主不够,子目录和文件也要递归归属 - 磁盘剩余空间必须 ≥ 当前
datadir实际占用(用du -sh /var/lib/mysql看),CLONE不压缩、不去重 - 大库(>50GB)克隆慢?可调大
clone_buffer_size(默认 4MB),加到my.cnf:clone_buffer_size = 32M,仅对本地克隆生效
远程克隆必须 donor/recipient 双向配齐,缺一不可
远程克隆不是 recipient 单方面发起就能连上的操作。donor 和 recipient 各自要满足三件事:插件启用、权限正确、网络通路打开——漏掉任意一个,都会静默卡住或报错 ERROR 3864 (HY000): Clone Donor connection failed。
- 两端都得运行上面的
SELECT PLUGIN_STATUS,确保都是ACTIVE - donor 端用户(如
'clone_donor'@'192.168.0.101')需BACKUP_ADMIN;recipient 端用户(如'clone_recip'@'localhost')需CLONE_ADMIN(注意:不是同一个账号,也不能复用复制账号) - recipient 必须提前执行:
SET GLOBAL(该语句需配合具体参数,常见为SET GLOBAL clone_valid_donor_list = '192.168.0.101:3306') - 远程克隆命令示例:
CLONE INSTANCE FROM 'clone_donor'@'192.168.0.101':3306 IDENTIFIED BY 'pwd123' DATA DIRECTORY = '/data/clone_remote_20260810';,其中DATA DIRECTORY是可选的,不指定则覆盖当前datadir并自动重启
真正容易被忽略的是:远程克隆中 DATA DIRECTORY 路径必须在 recipient 本地存在父路径、无同名目录、且 MySQL 进程有写权限;而 donor 侧的 clone_valid_donor_list 配置常被遗忘,导致连接被静默拒绝。











