克隆不是“一键复制”,而是物理快照加增量redo捕获,必须两端插件active、权限分治、配置对齐,否则大概率卡在redocopy阶段或报error 3864;clone local directory是本地克隆唯一合法命令,禁止用clone instance在本机自克隆。

克隆不是“一键复制”,而是物理快照 + 增量 redo 捕获,必须两端插件 ACTIVE、权限分治、配置对齐,否则大概率卡在 REDOCOPY 阶段或报 ERROR 3864。
CLONE LOCAL DIRECTORY 是本地克隆唯一合法命令
别用 CLONE INSTANCE 试图在本机克隆自己——它设计上禁止 donor 和 recipient 为同一进程,哪怕连 127.0.0.1:3306 也会触发循环检测失败,常见报错包括 ERROR 3095 或静默卡在 clone_type 阶段。
- 目标路径必须**不存在**,MySQL 会自动创建整套数据目录结构;不能位于原
datadir内部,否则报Directory overlaps with data directory - 执行前确保
mysqld进程用户(如mysql)对该路径有完整读写权限:chown -R mysql:mysql /backup/clone_20260614 - 执行用户需具备
BACKUP_ADMIN权限(REPLICATION SLAVE不够) - 命令示例:
CLONE LOCAL DIRECTORY = '/backup/clone_20260614';,成功后该目录可直接作为新实例的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.1.10')需BACKUP_ADMIN+REPLICATION SLAVE;recipient 端用户(如'clone_recip'@'localhost')需CLONE_ADMIN(隐含SHUTDOWN) - recipient 必须提前执行:
SET GLOBAL clone_valid_donor_list = '192.168.1.10:3306'(不支持 IPv6、不能带http://);donor 的bind_address不能是127.0.0.1,得设为0.0.0.0并放行防火墙
克隆完成后必须手动清理 auto.cnf 并校准逻辑元数据
克隆是物理拷贝,server_uuid、gtid_executed、server_id 全部原样复制——不处理就启动,轻则拒绝服务,重则主从 GTID 冲突、自增键重复。
- 启动前删掉 recipient 目录下的
auto.cnf,让 MySQL 重启时重生成唯一server_uuid - 检查
SELECT @@server_uuid是否与 donor 不同;若相同,说明auto.cnf没删干净或被其他进程重建 - 重启后立即校准:
SET GLOBAL server_id = xxx;、SET GLOBAL gtid_mode = ON;、确认log_bin已启用,否则无法配主从 -
innodb_file_per_table = OFF的旧实例无法被克隆,recipient 若仍启用该模式,会触发Invalid tablespace file
最易忽略的点:克隆后 recipient 自动退出再拉起,这个重启窗口(5–15 秒)是真实停机时间,不是“零停机”;且 performance_schema.clone_status 里显示的 Completed 只代表文件拷完,不代表实例已就绪——auto.cnf 不清,永远启不来。











