mysql clone插件必须永久加载且状态为active,否则报error 1126或unknown command;本地克隆要求目标路径不存在、递归属主mysql:mysql、磁盘空间充足;远程克隆需donor/recipient双向配置插件、权限、网络及白名单;克隆后须删除auto.cnf并重设server_uuid与server_id。

插件没真正加载成功
很多报错根本没走到克隆逻辑,比如 ERROR 1126 (HY000): Can't open shared library 'mysql_clone.so' 或 Unknown command 'CLONE',说明插件压根没加载。动态执行 INSTALL PLUGIN clone SONAME 'mysql_clone.so'; 只是临时生效,MySQL 重启就丢。
必须在 my.cnf 的 [mysqld] 段写死两行:
plugin-load-add = mysql_clone.so clone = FORCE_PLUS_PERMANENT
改完配置必须 systemctl restart mysqld,reload 不触发插件重载。验证方式只有一种:SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';,结果必须是 ACTIVE。
本地克隆时目标路径存在或权限不对
CLONE LOCAL DATA DIRECTORY 要求目标路径**完全不存在**——不是空目录,是路径本身不能存在。比如想克隆到 /data/clone_20260810,那这个目录在执行前就不能有,哪怕里面只有个 .keep 文件也会失败。
创建父路径后,必须递归归属:
mkdir -p /data-
chown -R mysql:mysql /data(注意是-R,子目录和未来生成的文件都要归属) - 磁盘剩余空间 ≥ 当前
datadir实际占用(用du -sh /var/lib/mysql看),CLONE 不压缩、不 dedup
常见错误现象:ERROR 3863 (HY000): Clone not supported 或静默卡住,往往就是路径已存在或属主没递归到位。
远程克隆时 donor/recipient 配置不对等
远程克隆不是 recipient 单方面发起就能连上的操作,donor 和 recipient 各自要满足三件事:插件启用、权限正确、网络通路打开——漏掉任意一个,都会报 ERROR 3864 (HY000): Clone Donor connection failed。
关键检查点:
- 两端都运行
SELECT PLUGIN_NAME, PLUGIN_STATUS ...,状态必须都是ACTIVE - donor 端用户(如
'clone_donor'@'192.168.0.101')需BACKUP_ADMIN+REPLICATION SLAVE - recipient 端用户(如
'clone_recip'@'localhost')需CLONE_ADMIN(注意不是同一个账号) - recipient 必须提前执行:
SET GLOBAL clone_valid_donor_list = '192.168.0.101:3306';(不能带http://,不支持 IPv6) - donor 的
bind_address不能是127.0.0.1,得设为0.0.0.0并放行防火墙 3306 端口
克隆完成后启动失败或复制异常
克隆是物理拷贝,auto.cnf、server_uuid、gtid_executed 全部原样复制。不处理就启动,轻则拒绝服务,重则 GTID 冲突、自增键重复。
必须手动清理:
- 删掉 recipient 数据目录下的
auto.cnf(让 MySQL 重启时重生成唯一server_uuid) - 确认
SELECT @@server_uuid与 donor 不同;若相同,说明auto.cnf没删干净或被其他进程重建 - 启动后立即校准:
SET GLOBAL server_id = xxx;,再配复制源:CHANGE REPLICATION SOURCE TO ... SOURCE_AUTO_POSITION=1;
另外,recipient 自动重启失败(ERROR 3707)很常见,这不是克隆失败,只是 systemd 没配好 Environment=MYSQLD_PARENT_PID=1,手动重启即可。但别跳过 auto.cnf 清理这步——它比重启失败危险得多。











