CLONE本质是InnoDB数据页的物理快照加增量redo捕获,非逻辑导出或慢速拷贝;500GB实例在配置得当下克隆仅需2–3分钟,“秒级”仅适用于小数据量。

CLONE不是逻辑导出,也不是慢速拷贝,它本质是 InnoDB 数据页的物理快照 + 增量 redo 捕获,只要配置得当,500GB 实例克隆耗时可压到 2–3 分钟内。但“秒级”只在小数据量(REDOCOPY 阶段卡住。
确认 clone 插件已启用且状态为 ACTIVE
没启用就执行 CLONE LOCAL DIRECTORY 或 CLONE INSTANCE,会直接报 ERROR 1126 (HY000): Can't open shared library 'mysql_clone.so' 或更隐蔽的 Unknown command 'CLONE'。
- 登录后第一件事:运行
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';,必须看到ACTIVE - 若为
DISABLED,执行INSTALL PLUGIN clone SONAME 'mysql_clone.so';(Linux)或INSTALL PLUGIN clone SONAME 'mysql_clone.dll';(Windows) - 永久生效推荐配
[mysqld]段:plugin-load-add=mysql_clone.so和clone=FORCE_PLUS_PERMANENT,避免重启后失效
本地克隆前必须清理目标目录并设对属主
克隆不是复制文件到已有目录,而是覆盖式重建整个数据目录结构。目标路径若已存在、非空、或属主不是 MySQL 运行用户(如 mysql:mysql),会直接失败。
- 目标路径必须不存在,例如用
/data/clone_20260508而非/data/mysql - 创建后立即执行
chown -R mysql:mysql /data/clone_20260508,否则报错类似Cannot create directory: Permission denied -
innodb_file_per_table=OFF的旧实例无法被克隆,目标端若仍启用该模式,会触发Invalid tablespace file
远程克隆需双向权限 + 网络连通 + donor 白名单
远程克隆不是单边操作,捐赠者(donor)和接受者(recipient)各自有硬性要求,缺一不可。
- 捐赠者用户需
BACKUP_ADMIN权限;接受者用户需CLONE_ADMIN(注意不是同一个权限) - 接受者实例必须能直连捐赠者 IP+端口(默认 3306),防火墙、SELinux、云安全组都要放行
- 接受者需显式设置
clone_valid_donor_list = 'donor_host:3306',否则报The cloning operation failed: Invalid donor - 克隆期间捐赠者会上备份锁(比
FLUSH TABLES WITH READ LOCK轻量),但任何 DDL 操作都会阻塞克隆,建议避开业务高峰
克隆后必须删除 auto.cnf 并重启实例
克隆生成的是完整数据目录副本,包含原 auto.cnf 中的 server-uuid。若不手动清除,启动新实例时会因 UUID 冲突拒绝服务,或导致主从复制异常。
- 克隆完成后,进入目标目录,执行
rm -f auto.cnf - 然后用独立配置启动该实例,例如
mysqld --datadir=/data/clone_20260508 --port=3307 --socket=/tmp/mysql3307.sock - 首次启动时 MySQL 会自动生成新
auto.cnf,确保server-uuid全局唯一
真正容易被忽略的点是:克隆只处理 InnoDB 表,MyISAM、CSV、Memory 等引擎的数据不会被包含。如果库中混用非 InnoDB 表,克隆后那些表将为空或丢失——这不是 bug,是设计如此。











