克隆不是执行一条命令就完事,必须 donor 和 recipient 双向对齐插件状态(均需永久激活且 PLUGIN_STATUS 为 ACTIVE)、权限(donor 用 BACKUP_ADMIN+REPLICATION SLAVE,recipient 用 CLONE_ADMIN)、网络(bind_address 非 127.0.0.1、防火墙放行、白名单设置)及元数据(克隆后手动删除 auto.cnf 重置 server_uuid),否则易卡在 ERROR 3864 或静默超时。

克隆不是“执行一条命令就完事”,必须 donor 和 recipient 双向对齐插件状态、权限、网络与元数据,否则大概率卡在 ERROR 3864 (HY000): Clone Donor connection failed 或静默超时。
确认 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';,结果中PLUGIN_STATUS必须为ACTIVE - 动态执行
INSTALL PLUGIN clone SONAME 'mysql_clone.so';只临时生效,MySQL 重启即失效 - Linux 下必须在
my.cnf的[mysqld]段添加两行:plugin-load-add = mysql_clone.so和clone = FORCE_PLUS_PERMANENT - 改完配置必须
systemctl restart mysqld(reload不触发插件重载)
本地克隆失败?90% 是路径、权限或空间问题
CLONE LOCAL DATA DIRECTORY 不是“复制到已有目录”,而是清空目标路径、重建整个数据目录结构。哪怕路径下只有一行 .keep 文件,也会失败。
- 目标路径必须**不存在**:
/data/clone_20260930,不能是/var/lib/mysql或/data/clone_20260930/(末尾斜杠不关键,但路径不能已存在) - 创建后立即执行:
chown -R mysql:mysql /data/clone_20260930,只改父目录属主不够,子目录和文件也要递归归属 - 磁盘剩余空间必须 ≥ 当前
datadir实际占用(用du -sh /var/lib/mysql看),CLONE 不压缩、不去重 - 命令示例:
CLONE LOCAL DATA DIRECTORY = '/data/clone_20260930';,成功后该目录可直接作为新实例的datadir启动
远程克隆必须 donor/recipient 双向配齐三要素
远程克隆失败 80% 出在单边配置——只在 donor 装插件、只在 recipient 开权限、只设 donor 白名单,任缺其一都会报 ERROR 3863 (Clone not supported) 或 ERROR 3864 (Clone Donor connection failed)。
- 两端都必须在
my.cnf中永久加载插件:plugin-load-add = mysql_clone.so+clone = FORCE_PLUS_PERMANENT(Windows 用mysql_clone.dll) - donor 端用户(如
'clone_donor'@'192.168.0.10')需BACKUP_ADMIN+REPLICATION SLAVE;recipient 端用户(如'clone_recip'@'localhost')需CLONE_ADMIN(隐含SHUTDOWN) - recipient 必须提前执行:
SET GLOBAL clone_valid_donor_list = '192.168.0.10:3306';(不支持 IPv6、不能带http://);donor 的bind_address不能是127.0.0.1,得设为0.0.0.0并放行防火墙
克隆完成后必须手动清理 auto.cnf 并校验 server_uuid
克隆是物理拷贝,auto.cnf 文件原样复制,导致 server_uuid 冲突——这是后续配主从时 CHANGE REPLICATION SOURCE TO 直接拒绝连接的最常见原因。
- recipient 完成克隆并自动重启后,立刻执行:
rm -f /var/lib/mysql/auto.cnf - 启动新实例前,确认
SELECT @@server_uuid;返回值与 donor 不同;若相同,说明auto.cnf没删干净或被其他进程重写 - 注意:GTID、自增偏移、二进制日志位置等逻辑元数据也全量复制,不能直接用于主从同步,必须重置或跳过
最容易被忽略的是:克隆后 recipient 的 auto.cnf 不删,server_uuid 就永远和 donor 一样;而这个冲突不会在克隆时报错,要等到你真正尝试建立复制链路时才暴露,且错误信息非常模糊。


















