MySQL 8.0+ 用户可直接启用原生方案跳过 FTWRL,彻底摆脱锁表逻辑:使用 CLONE PLUGIN 执行 CLONE LOCAL DATA 或 CLONE FROM,底层基于文件快照 + redo 应用,全程无全局锁;若已采购企业版,可启用 MySQL Enterprise Backup,利用 InnoDB 原生快照机制保证一致性。

直接用 LOCK TABLES FOR BACKUP 替代 FLUSH TABLES WITH READ LOCK,是目前最有效、影响最小的解法。它不阻塞 InnoDB 表的读写,只限制 MyISAM 等非事务表更新和所有 DDL,业务几乎无感。
优先启用 Backup Lock(Percona Server 或 AliSQL)
这是专为解决 FTWRL 伤筋动骨问题设计的轻量级替代方案:
- 执行
LOCK TABLES FOR BACKUP:仅阻塞非事务表写入和全部 DDL,InnoDB 的 INSERT/UPDATE/DELETE/SELECT 全部照常运行 - 执行
LOCK BINLOG FOR BACKUP:锁定 binlog 位点,确保备份能拿到一致的 GTID 或 file+pos - 拷贝 frm、myd、myi 等非 InnoDB 文件后,立即
UNLOCK TABLES和UNLOCK BINLOG - 整个过程毫秒级持锁,不再依赖长时间关闭表或等待长查询结束
若无法更换数据库版本,必须用 XtraBackup 时
通过参数主动控制风险,避免无限等待:
- 加
--lock-wait-timeout=30:FTWRL 等待超时即退出,不卡死备份流程 - 加
--kill-long-queries-timeout=20:自动终止运行超 20 秒的阻塞查询(注意评估业务容忍度) - 务必在延迟从库(如 lag=3600)上执行全量备份,完全隔离主库和实时从库
- 搭配增量备份策略,大幅降低全量频次和锁窗口
MySQL 8.0+ 用户可直接启用原生方案
跳过 FTWRL,彻底摆脱锁表逻辑:
- 使用 CLONE PLUGIN:执行
CLONE LOCAL DATA或CLONE FROM,底层基于文件快照 + redo 应用,全程无全局锁 - 若已采购企业版,启用 MySQL Enterprise Backup,它利用 InnoDB 原生快照机制,无需 FTWRL 即可保证一致性
- 注意:Clone 要求源目标目录空闲且磁盘空间充足;MEB 需商业许可
通用兜底方案:存储层快照(LVM/ZFS/EBS)
适合所有 MySQL 版本,对数据库侵入最小:
- 先执行极短时间的
FLUSH TABLES WITH READ LOCK(通常 - 立刻触发底层快照(如
lvcreate --snapshot或云平台 EBS Snapshot) - 快照创建完成,立即
UNLOCK TABLES - 后续所有文件拷贝均在快照中进行,业务完全不受影响


















