远程克隆需两端均启用Clone插件、版本与架构严格一致、recipient datadir为空且文件系统支持硬链接、配置白名单及权限,并手动配置复制关系。

直接上远程克隆,别走逻辑导出导入——1TB 数据用 mysqldump 或 mydumper 得跑几十小时,而 CLONE INSTANCE 通常 2–6 小时能完成,前提是 donor 和 recipient 都配对到位。
两端插件必须都启用,且版本严格一致
Clone 不是 donor 单方面“发数据”,recipient 也要主动拉取并重建目录结构。常见失败是只在 donor 上执行 INSTALL PLUGIN clone SONAME 'mysql_clone.so',recipient 执行时直接报 ERROR 3863 (HY000): Clone not supported。
- 两边都要查:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone',结果必须是ACTIVE - 配置文件里加
plugin_load_add = mysql_clone.so+clone = FORCE_PLUS_PERMANENT,否则重启后失效 - 版本必须完全一致:
SELECT VERSION()要比到小数点后第三位(如8.0.33≠8.0.33-1),补丁级不匹配会触发ER_CLONE_DONOR_VERSION_MISMATCH - 架构必须相同:x86_64 donor 克隆到 ARM64 cloud 实例会静默失败,不报错但
performance_schema.clone_status卡在Clone Donor error: Unsupported platform
远程克隆前,recipient 的 datadir 必须为空且支持硬链接
克隆不是“覆盖写”,而是停掉 recipient MySQL、清空 datadir、重建整个 InnoDB 文件体系。若目标目录非空,命令直接报 ERROR 3864 (HY000): The data directory is not empty;若文件系统不支持硬链接(如某些云盘挂载为 vfat 或启用了 noexec),克隆会在 Stage: apply_log 卡住或报 ER_CLONE_DONOR_NOT_SUPPORTED。
- 停 MySQL:
systemctl stop mysqld,再rm -rf /var/lib/mysql/*(确认路径用SHOW VARIABLES LIKE 'datadir') - 检查文件系统:
df -T /var/lib/mysql,确保是ext4或xfs;云环境特别注意是否挂载了 NAS 或对象存储网关,它们通常不支持硬链接 - 确认
innodb_file_per_table = ON在 donor 上已启用,否则克隆无法分离表空间,直接失败
网络与权限:别用复制账号,也别信默认端口
Clone 走的是专用数据通道,不复用 binlog 复制链路,所以 REPLICATION SLAVE 权限完全没用。它需要 donor 端有 BACKUP_ADMIN、recipient 端有 CLONE_ADMIN,且 donor 地址必须显式白名单。
- donor 上建用户:
CREATE USER 'clone_donor'@'%' IDENTIFIED BY 'pwd'; GRANT BACKUP_ADMIN ON *.* TO 'clone_donor'@'%'; - recipient 上执行前设白名单:
SET GLOBAL clone_valid_donor_list = 'donor-public-ip:3306';(不能是内网地址,云环境要填 donor 对外暴露的 IP) - 云防火墙/安全组必须放行 donor 的 3306(或你指定的 donor 端口),Clone 内部会建立额外 socket 连接,仅开 3306 不够,但强制指定端口后可收敛流量
- 关闭 recipient 的 SELinux:
setenforce 0,否则常报errno 13类权限拒绝,日志里看不到具体路径,只显示Clone Donor connection failed
克隆完成后,从库不会自动启动复制
Clone 只复制物理文件和系统表,不带任何复制元数据。recipient 启动后是个干净实例:SHOW SLAVE STATUS 为空,gtid_executed 是 donor 克隆时刻的快照值,但没设置 source 信息。
- 启动 MySQL 后立刻查:
SELECT @@global.gtid_executed;,记下这个 GTID 集合 - 去 donor 查当前主库的
SHOW MASTER STATUS或SELECT * FROM performance_schema.replication_applier_status_by_coordinator,确认该 GTID 已包含在Executed_Gtid_Set中 - 在 recipient 上执行:
CHANGE REPLICATION SOURCE TO SOURCE_HOST='donor-ip', SOURCE_USER='repl', SOURCE_PASSWORD='pwd', SOURCE_AUTO_POSITION = 1;(8.0.23+ 语法) - 最后
START REPLICA;,别漏这步——克隆不帮你启线程
最易忽略的是:克隆过程虽不阻塞 donor 的 DML,但会短暂加全局读锁(几秒),且持续读取所有 ibd 文件,可能引发 donor 缓冲池压力和 I/O 抖动。1TB 数据建议避开业务高峰,或提前在 donor 上调大 innodb_buffer_pool_size 并预热热点页。


















