唯一适用于误删后紧急恢复的是本地克隆+手动切换datadir;需确保clone插件active、innodb_file_per_table=on、目标目录为空且权限正确,克隆后必须清理auto.cnf以防gtid冲突。

CLONE INSTANCE 不是恢复命令,而是覆盖式重建。真正能用于误删后快速恢复的,只有本地克隆 + 手动切换目录这一条路径。
确认插件已加载且状态为 ACTIVE
很多卡住或报错(比如 ERROR 3864、静默无响应)其实源于插件根本没真正启用。
- 执行
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) - 推荐写进
my.cnf永久生效:[mysqld] plugin-load-add=mysql_clone.so clone=FORCE_PLUS_PERMANENT
,避免重启后失效 - 注意:
innodb_file_per_table=ON必须开启,否则克隆中途会报Invalid tablespace file
本地克隆:5–30 秒生成可启动副本
这是唯一适用于“数据误删后紧急恢复”的方式——donor 实例全程在线,不影响业务。
- 创建专用用户并授权:
CREATE USER 'clone_user'@'127.0.0.1' IDENTIFIED BY 'strong_pass'; GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'127.0.0.1'; - 目标目录必须为空、MySQL 进程有读写权限:
chown mysql:mysql /backup/clone_20260902 - 执行克隆:
CLONE LOCAL DATA DIRECTORY = '/backup/clone_20260902';,耗时取决于数据量,通常在秒级 - 克隆完成后,donor 不受影响;你拿到的是一个完整、冷态、可直接启动的物理快照
恢复出问题的实例:三步切换 datadir
别直接启动克隆目录——它不是即插即用的服务,而是待迁移的备份体。
- 停掉故障实例:
systemctl stop mysqld(或kill -15对应 pid) - 重命名原
datadir(如/var/lib/mysql→/var/lib/mysql.bak),再把克隆目录mv /backup/clone_20260902 /var/lib/mysql -
chown -R mysql:mysql /var/lib/mysql,然后启动:systemctl start mysqld - 启动成功后,检查
SELECT @@server_uuid;——如果仍和 donor 相同,说明你漏了清理auto.cnf,会导致主从同步失败或 GTID 冲突
远程克隆不适合应急恢复
它不是“恢复”,是“重建+重配”,整个流程至少 10 分钟起,且 recipient 在克隆后自动退出、systemd 拉起前有 5–15 秒不可用窗口。
- 必须提前配 donor 的
bind_address、防火墙端口、recipient 的clone_valid_donor_list - donor 需
BACKUP_ADMIN + REPLICATION SLAVE,recipient 用户必须有CLONE_ADMIN(仅BACKUP_ADMIN不够) - 克隆完 recipient 的
auto.cnf会原样复制 donor 的server_uuid和server_id,必须手动删掉auto.cnf,让 mysqld 启动时自动生成新 uuid,再连进去执行SET GLOBAL server_id = 新值 - 克隆过程禁止 DDL,若 donor 正在跑大事务或 DDL,克隆可能卡住或失败
真正容易被忽略的点是:auto.cnf 文件的存在与否,直接决定克隆后的实例能否加入主从或独立运行。它不随克隆命令自动处理,也不报错提示,但只要重复,GTID 就废,监控就乱,连 performance_schema 都可能异常。











