能,mysqldump --single-transaction可绕过ftwrl,仅对纯innodb表有效;它通过repeatable read事务快照实现一致性备份,全程不触发flush tables with read lock,业务dml不受影响,但遇非事务表或长事务会退化或卡住。

mysqldump --single-transaction 能绕过 FTWRL 吗?
能,但仅限于纯 InnoDB 表。它不触发 FLUSH TABLES WITH READ LOCK,而是依赖 MVCC 在 REPEATABLE READ 隔离级别下开启一个快照事务,导出时业务可读可写。
- 必须确保所有表都是 InnoDB;一旦存在 MyISAM、MEMORY 等非事务表,
--single-transaction会自动失效,退化为加锁行为 - 长事务会拖住 undo 日志清理,可能引发空间暴涨,需监控
innodb_history_list_length -
--master-data=2仍需在事务启动后执行一次轻量级SHOW MASTER STATUS,不阻塞 DML,但要求 binlog 开启 - 不能和
--lock-tables或--lock-all-tables共用,参数冲突会导致报错
xtrabackup 备份时 FTWRL 到底锁多久?
通常 .frm、MyISAM 表)。真正耗时的是文件拷贝本身,FTWRL 本身不参与 I/O。
- 锁持续时间与非 InnoDB 表数据量正相关;若全库是 InnoDB,FTWRL 几乎瞬时完成
- 若有长查询或未结束的 DDL 正在执行,FTWRL 会等待它们完成,此时锁持有时间不可控
-
--kill-long-queries-timeout=30可主动终止超时查询,避免 FTWRL 卡死,但要慎用——可能中断重要报表任务 - MySQL 8.0+ 用户可考虑
CLONE PLUGIN,完全跳过 FTWRL,但要求源/目标实例版本一致且支持克隆
Percona Server 的 LOCK TABLES FOR BACKUP 真的不锁 InnoDB 写入?
是的,这是目前最接近“零感知”的替代方案,但仅限 Percona Server(非 MySQL 社区版或 MariaDB)。
-
LOCK TABLES FOR BACKUP不会阻塞 InnoDB 的INSERT/UPDATE/DELETE/SELECT,只拦 MyISAM 更新和所有 DDL - 它不刷新表、不驱逐缓存,只等正在执行的冲突操作自然结束,因此等待时间远短于 FTWRL
- 必须搭配
LOCK BINLOG FOR BACKUP才能拿到一致性 binlog 位点,否则--prepare时可能因位点漂移导致恢复失败 - XtraBackup 2.4+ 默认启用该机制(当检测到 Percona Server 时),无需额外参数,但需确认
show variables like 'version%'输出含Percona
从库备份为什么能彻底规避主库 FTWRL?
因为 FTWRL 只影响当前实例的写入能力,而从库的写入来自 SQL 线程重放 relay log,不是客户端直连写入。只要不在主库上执行备份,主库就全程不受锁影响。
- 延迟从库(
SOURCE_DELAY=3600)更安全:备份期间即使误删,也有 1 小时窗口回退 - 备份前可临时停 SQL 线程:
STOP REPLICA SQL_THREAD,此时从库变成只读快照,连毫秒级 FTWRL 都可省略 - 注意
--dump-slave参数:在从库 dump 时自动注入主库 binlog 位置,但会短暂 kill SQL 线程,恢复后需手动START REPLICA - 云环境推荐 EBS/ZFS 快照:只需
FLUSH TABLES WITH READ LOCK; UNLOCK TABLES;两行命令,锁表时间取决于系统调用延迟,通常











