能,但必须版本一致、权限分治、目录清空、网络通透——缺一不可;Clone是物理快照搬运,跳过任一检查就会卡住、静默退出或报错中断。

直接说结论:能,但必须版本一致、权限分治、目录清空、网络通透——缺一不可。Clone不是“一键复制”,而是物理快照搬运,跳过任一检查,CLONE INSTANCE 就会卡住、静默退出或报错后中断。
确认 clone 插件已加载且状态为 ACTIVE
很多问题其实卡在第一步:插件看似装了,实则没激活。执行SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';,结果必须是 ACTIVE;若为空或 DISABLED,说明未真正启用。
- 动态安装命令是
INSTALL PLUGIN clone SONAME 'mysql_clone.so';(Linux)或mysql_clone.dll(Windows),但前提是文件真实存在且@@plugin_dir指向正确路径 - 更可靠的做法是写入配置文件:
[mysqld]下添加plugin-load-add = mysql_clone.soclone = FORCE_PLUS_PERMANENT
然后重启 mysqld;仅靠INSTALL PLUGIN无法保证重启后仍可用 - 版本必须 ≥ 8.0.17,且官方二进制包才默认带
mysql_clone.so;部分云厂商定制版默认禁用,需手动验证
远程克隆的 donor 和 recipient 权限必须严格分离
不是“一个账号走天下”,而是 donor 和 recipient 各需不同权限,且账号必须在两端都存在、密码一致、显式授权。- donor(源库)用户(如
'cloner'@'%')必须有:BACKUP_ADMIN(必需)、REPLICATION SLAVE(后续配主从用) - recipient(目标库)用户必须有:
CLONE_ADMIN(隐含BACKUP_ADMIN+SHUTDOWN),否则直接报错ERROR 3095 (HY000): Insufficient privileges - recipient 上还需提前运行:
SET GLOBAL clone_valid_donor_list = '192.168.1.10:3306';(填 donor 地址),否则连接被拒绝 - donor 的
bind_address不能是127.0.0.1,得设为0.0.0.0或具体内网 IP,并确保防火墙放行 3306 端口
CLONE INSTANCE 执行卡住?先查 performance_schema.clone_status
常见现象是客户端长时间无响应,SHOW PROCESSLIST 显示状态为 Clone Donor State 或 Clone Recipient State,但进度不更新——这不是失败,而是静默等待。
- 先执行
SELECT * FROM performance_schema.clone_status\G查实时阶段和错误信息,别只盯着命令行是否返回 - 常见卡点:目标
datadir剩余空间不足(需 ≥ 源库ibdata1+ 所有.ibd总大小 × 1.2)、SELinux/AppArmor 拦截、源库innodb_file_per_table = OFF(会报ER_CLONE_DONOR_NOT_SUPPORTED) - 若网络慢或 IO 高,可调优:
SET GLOBAL clone_autotune_concurrency = OFF;,再设clone_max_concurrency = 4;,或开启压缩:SET GLOBAL clone_enable_compression = ON;
克隆完成后必须手动配置复制,server_uuid 冲突是高频坑
CLONE INSTANCE 只复制数据文件和 GTID_EXECUTED 值,不启动复制线程、不写 master.info、不设置 SOURCE_HOST,一切都要你补上。
- 克隆后 recipient 自动重启,
auto.cnf中的server-uuid被保留——这是设计行为,但也是隐患:若 donor 和 recipient 的server_uuid相同(比如虚拟机克隆环境),后续START SLAVE会因 GTID 冲突拒绝连接 - 必须立刻执行:
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.10', SOURCE_USER='repl', SOURCE_PASSWORD='xxx', SOURCE_AUTO_POSITION=1;(MySQL 8.0.23+ 语法) - 再查
SELECT @@global.gtid_executed;确认起点,然后START REPLICA;(注意不是START SLAVE)
真正容易被忽略的,是 server-uuid 的继承机制和 clone_valid_donor_list 的动态作用域——前者让克隆后实例“长得像 donor”,后者却只在当前 session 生效,下次重启就得重设。


















