mysql clone plugin 是 mysql 8.0.17+ 内置物理克隆机制,支持本地与远程克隆,需确保插件active、版本兼容、权限正确(donor配backup_admin,recipient配clone_admin)、网络通畅及my.cnf中配置plugin-load-add和clone=force_plus_permanent。

CLONE 是 MySQL 8.0.17+ 内置的物理克隆机制,对 TB 级数据搬迁来说,它不是“能用”,而是当前最稳、最快、最省心的选择——前提是 donor 和 recipient 配置对、权限对、网络通、版本兼容。
确认 Clone 插件已启用且状态为 ACTIVE
插件没装或没激活,所有后续操作都会直接报错 ERROR 1701 (HY000): Cannot execute statement: binlog is disabled 或更模糊的权限类错误。
必须两边都执行检查:
-
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';—— 结果必须是ACTIVE - 若为空,先运行
INSTALL PLUGIN clone SONAME 'mysql_clone.so'; - 为防重启失效,
my.cnf的[mysqld]段落里必须加两行:plugin-load-add = mysql_clone.so和clone = FORCE_PLUS_PERMANENT - 注意:8.0.27 之前不支持远程克隆,
CLONE INSTANCE FROM会报错ERROR 3864 (HY000),别硬试
远程克隆前必须配对的权限与用户
Clone 不走 SQL 复制通道,不认 REPLICATION SLAVE,用错权限就卡在连接 donor 阶段。
- donor(源库)上创建用户并赋权:
GRANT BACKUP_ADMIN ON *.* TO 'clone_donor'@'%'; - recipient(目标库)上创建用户并赋权:
GRANT CLONE_ADMIN ON *.* TO 'clone_recip'@'%';(该权限自动包含BACKUP_ADMIN和SHUTDOWN) - 不要复用已有复制账号——哪怕它有
REPLICATION SLAVE,没BACKUP_ADMIN就连不上 donor - 密码需明文一致,且 donor 用户必须允许从 recipient 主机 IP 连入(
'clone_donor'@'recipient_ip'更安全)
远程克隆失败最常见的三个底层原因
报错如 ERROR 3864 (HY000): Clone Donor connection failed 或连接超时,90% 不是配置问题,而是环境拦路。
- 防火墙/安全组没放 donor 的主端口(如 3306)——Clone 内部会尝试建立额外 socket 连接,仅开放 3306 不够,建议 donor 主机临时关防火墙验证
- donor 启用了 SELinux 或 AppArmor:表现为
errno 13权限拒绝,setenforce 0或停用 AppArmor 可快速验证 -
clone_valid_donor_list没设或设错:recipient 上必须提前执行SET GLOBAL clone_valid_donor_list = 'donor_host:3306';,否则默认拒绝所有 donor 地址
TB 级克隆过程中的关键参数调优
默认参数在千兆网或 NVMe 盘下会严重限制吞吐,尤其当 donor 负载高时,容易触发超时或传输抖动。
- recipient 上调大并发:
SET GLOBAL clone_max_concurrency = 8;(默认 4,根据 CPU 核数设) - 开启压缩节省带宽:
SET GLOBAL clone_enable_compression = ON;(内网可关,跨 IDC 建议开) - 限制单线程带宽防打满:
SET GLOBAL clone_max_data_bandwidth = 50;(单位 MB/s,避免影响 donor 正常业务) - DDL 锁等待时间要留足:
SET GLOBAL clone_ddl_timeout = 300;(TB 级克隆期间 donor DDL 会被阻塞,设太小会导致克隆中途失败) - 注意:
clone_buffer_size仅影响本地克隆,远程克隆无效
真正卡住 TB 级克隆的,往往不是语法或权限,而是 donor 上那个隐形的 clone_block_ddl 锁——它不报错,但所有 ALTER TABLE、DROP DATABASE 会一直挂起,直到克隆结束。如果你在克隆中途发现 donor 的 DDL 集中排队,别慌,这是设计行为,不是故障。











