clone插件在mysql 8.0.17+中无法对tb级数据实现秒级克隆,实际耗时取决于磁盘i/o、网络带宽及配置;90%失败源于插件未永久激活(需my.cnf配置plugin-load-add与clone=force_plus_permanent并重启),而非权限或网络问题。

CLONE 插件在 MySQL 8.0.17+ 中确实能大幅压缩迁移时间,但“海量数据”(如 TB 级)下无法做到“秒级”,实际耗时取决于磁盘吞吐、网络带宽和配置调优。别被宣传话术带偏——它快是相对传统逻辑备份(mysqldump)或复制初始化而言,不是无条件的飞速。
确认 clone 插件已 ACTIVE 且永久加载
90% 的“克隆失败”根本没走到数据传输阶段,卡在插件未加载。报错 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 重启即失效 - 必须在
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不触发插件重载 - 检查插件路径是否真实存在:
SELECT @@plugin_dir;,然后ls -l确认mysql用户对该文件有读+执行权限
本地克隆失败?大概率是路径或权限问题
CLONE LOCAL DATA DIRECTORY 是唯一合法的本地克隆命令,CLONE INSTANCE 在本机自克隆会被循环检测拒绝,报 ERROR 3095 或静默卡住。
- 目标路径必须**不存在**:
/data/clone_20260904可以,/data/clone_20260904/(末尾斜杠不影响),但/data/mysql或/data/clone_20260904/.keep(哪怕只有一行空文件)都会失败 - 路径不能位于原
datadir内部,否则报Directory overlaps with data directory - 执行前确保
mysqld进程用户(如mysql)对该父目录有完整权限:chown -R mysql:mysql /data/clone_20260904(递归,不能只改父目录) - 磁盘剩余空间必须 ≥ 当前
datadir实际占用(用du -sh /var/lib/mysql看),CLONE不压缩、不去重 - 大库(>50GB)克隆慢?可调大
clone_buffer_size(默认 4MB),加到my.cnf:clone_buffer_size = 32M,仅对本地克隆生效
远程克隆卡在 ERROR 3864?检查 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+REPLICATION SLAVE(后者为后续配主从准备) - recipient 端用户(如
'clone_recip'@'localhost')需CLONE_ADMIN(隐含SHUTDOWN,因克隆后要自动重启) - 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 及额外 socket 端口
克隆完成后 recipient 启动失败?auto.cnf 和 server_uuid 没清理
克隆是物理拷贝,auto.cnf、server_uuid、gtid_executed 全部原样复制——不处理就启动,轻则拒绝服务,重则主从 GTID 冲突、自增键重复。
- recipient 重启后第一件事:
rm -f /var/lib/mysql/auto.cnf(Linux 路径,Windows 是 datadir 下同名文件) - 重启 MySQL,检查
SELECT @@server_uuid;,确认与 donor 不同;若相同,说明auto.cnf没删干净或被其他进程重建 - 手动更新
my.cnf:确保server_id唯一、gtid_mode = ON、log_bin开启(如果要做主从) - 别指望克隆自动恢复配置——
CLONE INSTANCE不复制my.cnf参数、字符集、排序规则、innodb_page_size等,这些都得人工对齐
auto.cnf 清理和 server_id 校准——这两个动作漏掉一个,后续主从就直接废了。











