clone instance远程克隆是覆盖式重建而非一键恢复,需提前配置donor/recipient双端权限、网络、版本及参数一致性,并严格处理克隆后的auto.cnf和server_id。

CLONE INSTANCE 远程克隆不是“一键恢复”,而是覆盖式重建,必须提前配好 donor/recipient 双端权限、网络、配置,否则执行就卡住或报错。
CLONE INSTANCE 远程克隆前必须满足的硬性条件
远程克隆失败绝大多数不是语法问题,而是以下任一条件未满足导致静默失败或报 ERROR 3864 (HY000)、ERROR 3095 (HY000):
- donor 实例的
bind_address不能是127.0.0.1,必须设为0.0.0.0或具体内网 IP,并开放防火墙 3306 端口 - donor 和 recipient 上都必须存在**同名同密**的用户,且 donor 用户有
BACKUP_ADMIN,recipient 用户有CLONE_ADMIN(仅BACKUP_ADMIN不行) - recipient 必须提前执行
SET GLOBAL clone_valid_donor_list = '192.168.1.10:3306',地址必须与 CLONE 命令中一致,不支持 IPv6 地址字面量 - 两端 MySQL 版本必须完全一致(如都是 8.0.33),
innodb_page_size、字符集、innodb_data_file_path配置也需相同 - recipient 数据目录必须为空,或使用
DATA DIRECTORY = '/path/to/clone'指定一个**不存在的空目录**,MySQL 进程对其有读写权限(chown mysql:mysql /path/to/clone)
执行 CLONE INSTANCE 远程克隆的正确命令格式
命令本身很简单,但参数顺序和可选子句影响行为:
CLONE INSTANCE FROM 'cloner'@'192.168.1.10':3306 IDENTIFIED BY 'StrongPass123!' DATA DIRECTORY = '/data/clone_20260904';
- 必须用拥有
CLONE_ADMIN权限的用户连接 recipient 执行该命令(不是 donor 用户) -
DATA DIRECTORY是关键安全选项:不加则默认清空 recipient 原datadir并覆盖重启;加了就只把 donor 数据克隆到指定路径,原实例不受影响 -
REQUIRE SSL或REQUIRE NO SSL可显式控制加密传输,若 donor 启用了require_secure_transport=ON,这里必须加REQUIRE SSL - 克隆过程中 donor 会加毫秒级全局读锁,不影响业务写入;recipient 在克隆完成后自动退出并由 systemd 重启,期间不可用 5–15 秒
克隆完成后必须立即处理的两个文件
远程克隆是物理拷贝,auto.cnf 和 server_id 全部照搬 donor,直接启动会导致主从同步崩溃或 GTID 冲突:
- 进入 recipient 克隆出的目录(如
/data/clone_20260904),删掉auto.cnf文件——下次启动 mysqld 会自动生成新server_uuid - 启动后连进 MySQL,执行
SET GLOBAL server_id = 102(不能为 0 或与其他节点重复) - 如果用于搭建从库,再执行
CHANGE REPLICATION SOURCE TO ... SOURCE_AUTO_POSITION = 1,注意这里用的是复制账号(如repl),不是克隆账号cloner - 别跳过
SELECT * FROM performance_schema.clone_status\G查看状态,STATE为Completed才算真正结束
最易被忽略的是:克隆完成后的 auto.cnf 处理和 server_id 重设——很多 GTID 复制失败、主从连接拒绝、甚至单机监控异常,根源都在这里。不要以为克隆完就能直接用。











