CLONE LOCAL DATA DIRECTORY 并非通用秒级复制解法,仅适用于数据量小的场景。

CLONE LOCAL DATA DIRECTORY 不是“秒级复制”的通用解法,它只在数据量小(du -sh 显示的当前 datadir 占用大小,TB 级别必然耗时数分钟以上。
确认 clone 插件已永久激活且状态为 ACTIVE
很多失败根本没走到克隆阶段,卡在 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 - 动态执行
INSTALL PLUGIN clone SONAME 'mysql_clone.so';只是临时生效,MySQL 重启即失效 - 必须在
my.cnf的[mysqld]段添加两行:plugin-load-add = mysql_clone.so和clone = FORCE_PLUS_PERMANENT(Linux 下文件名是mysql_clone.so,Windows 是mysql_clone.dll) - 改完配置必须
systemctl restart mysqld,reload不触发插件重载
目标路径必须不存在且属主完整递归归属
CLONE LOCAL DATA DIRECTORY 不是“复制到已有目录”,而是清空目标路径、重建整个数据目录结构。哪怕路径下只有一行 .keep 文件,也会失败。
- 目标路径必须不存在:
/data/clone_20261014,不能是/data/mysql或/data/clone_20261014/(末尾斜杠不关键,但路径不能已存在) - 创建后立即执行:
chown -R mysql:mysql /data/clone_20261014,只改父目录属主不够,子目录和文件也要递归归属 - 磁盘剩余空间必须 ≥ 当前
datadir实际占用(用du -sh /var/lib/mysql看),CLONE不压缩、不去重
执行命令与权限验证
本地克隆只依赖 BACKUP_ADMIN 权限,不需要 CLONE_ADMIN;但该用户必须能连上本机实例,且不能复用复制账号或 root(避免权限混淆)。
- 授权示例:
GRANT BACKUP_ADMIN ON *.* TO 'clone_local'@'localhost'; - 执行命令格式严格:
CLONE LOCAL DATA DIRECTORY = '/data/clone_20261014';(等号可省略,但路径必须是绝对路径、单引号包裹) - 禁止使用
CLONE INSTANCE在本机自克隆——它设计上禁止 donor 和 recipient 为同一进程,哪怕连127.0.0.1:3306也会触发循环检测失败,报ERROR 3095或静默卡在clone_type阶段 - 克隆完成后,该目录可直接作为新实例的
datadir启动,但启动前必须删掉其中的auto.cnf,否则server_uuid冲突导致无法启动
克隆后不能直接启动?检查 auto.cnf 和 innodb_file_per_table
克隆是物理拷贝,server_uuid、gtid_executed、server_id 全部原样复制——不处理就启动,轻则拒绝服务,重则 GTID 冲突、自增键重复。
- 启动前必须手动删除 recipient 目录下的
auto.cnf,让 MySQL 重启时重生成唯一server_uuid - 检查
SELECT @@server_uuid是否与 donor 不同;若相同,说明auto.cnf没删干净或被其他进程重建 - 目标实例必须开启
innodb_file_per_table=ON(默认已开),否则中途报ERROR 1086 (HY000): File 'xxx.ibd' already exists - 克隆不复制 binlog 配置,启动新实例后需单独配置
log-bin、binlog_format等参数才能用于主从











