clone插件在mysql 8.0.17+中确可实现秒级克隆,但该速度仅适用于小数据量(如gb级),tb级需数分钟至数十分钟,取决于磁盘i/o、网络带宽及并发参数配置。

CLONE 插件在 MySQL 8.0.17+ 中确实能实现接近“秒级”的实例克隆,但这个“秒级”只适用于小数据量(比如 确认 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 clone_valid_donor_list = '192.168.0.101:3306'(不能带http://,IPv6 地址暂不支持) - donor 的
bind_address不能是127.0.0.1,得设为0.0.0.0或具体内网 IP,并确保防火墙/云安全组放行 3306 端口(Clone 内部会建额外连接,别只信文档说的“走主端口”)
克隆完成后,server_uuid 冲突是最高频的启动失败原因
CLONE INSTANCE 执行完,recipient 进程会自动退出并由 systemd 重启——但新进程读到的仍是 donor 的 auto.cnf,里面 server-uuid 完全一样,导致实例拒绝启动,或后续主从 GTID 冲突。
- 克隆完成、recipient 重启前,必须手动删掉目标
datadir下的auto.cnf(路径类似/var/lib/mysql/auto.cnf) - 重启后立刻验证:
SELECT @@server_uuid;,确保与 donor 不同;若相同,说明auto.cnf没删干净或被其他机制恢复 -
gtid_executed和auto_increment_offset等值不会自动重置,主从场景下必须人工校准,否则第一次写入就可能报错
auto.cnf 这一步——很多人看到 mysqld 自动重启了,就以为万事大吉,结果第二天发现主从延迟飙升,查日志才发现 UUID 重复。











