讲师中心 微信公众号
AI工具推荐 视频效率加速

mysql备份数据一致性如何保证_FTWRL全局读锁与事务锁区别

陌雪同学_6632

陌雪同学_6632

发布时间:2026-04-21 23:25:16

|

499人浏览过

|

来源于php中文网

原创

FTWRL 不保证事务一致性,仅阻塞写操作而不等待事务结束;InnoDB 一致性备份应依赖 --single-transaction + REPEATABLE READ 快照,配合 binlog 位点记录。

mysql备份数据一致性如何保证_ftwrl全局读锁与事务锁区别

FTWRL 会阻塞所有写操作,但不保证事务一致性

执行 FLUSH TABLES WITH READ LOCK 后,MySQL 确实会暂停所有 DML(INSERT/UPDATE/DELETE)和 DDL(ALTER/DROP),看起来“数据不动了”,但这只是表级锁的表象。它**不等待正在运行的事务提交或回滚**,也不阻止新事务启动——只要该事务只读,就能继续执行。这意味着:如果你在 FTWRL 期间有长事务正在更新某张表,它的修改可能尚未刷盘,而 FTWRL 又不允许你等它结束,备份拿到的就是一个“中间态”快照,不是一致点。

常见错误现象:
– 备份恢复后,InnoDB 表出现 ERROR 1032 (HY000): Can't find record in 'xxx'
– 主从切换后从库复制中断,报 Row doesn't exist in table

  • FTWRL 是全局锁,作用于整个实例,影响面大,运维窗口难协调
  • 它对 MyISAM 表有效(因为无事务),但对 InnoDB 仅能配合 mysqldump --single-transaction 才可能安全——而两者不能混用
  • 若备份工具未显式释放锁(如脚本异常退出),锁会一直持有,导致业务写入长时间卡住

真正保证一致性得靠 --single-transaction + 事务隔离级别

InnoDB 的一致性备份核心不是锁表,而是利用 MVCC 和事务快照。启用 mysqldump --single-transaction 时,dump 进程会先开启一个 REPEATABLE READ 事务,再执行 SELECT。这个事务从开始时刻就建立了一个全局一致的快照(通过 read view),后续所有查询都基于该快照,不受其他并发事务提交的影响。

关键前提是:
– 表必须是 InnoDB 引擎(MyISAM 不支持事务,强制退化为 FTWRL)
– dump 过程中不能有长事务持续运行(否则 read view 无法清理 undo log,可能导致备份变慢甚至失败)

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 务必确认 MySQL 配置项 innodb_file_per_table = ON,否则单表恢复困难
  • 避免在备份期间执行 ALTER TABLE 或 OPTIMIZE TABLE,它们会隐式提交当前事务,破坏快照一致性
  • 如果备份包含非事务表(如 CSV、MEMORY),需额外用 FTWRL 单独处理,但要控制其时间极短

FTWRL vs 事务锁:本质不同,不能互相替代

FLUSH TABLES WITH READ LOCK 是 server 层的全局状态锁,由主线程管理,直接挂起所有更新线程;而事务锁(如行锁、间隙锁)是 InnoDB 存储引擎层的并发控制机制,只对本事务可见,且受隔离级别约束。两者生命周期、作用域、释放时机完全不同。

典型混淆场景:
– 以为加了 FTWRL 就不用管事务,结果备份时另一个连接还在跑 BEGIN; UPDATE ...; (未提交),dump 读到的是旧值,但该事务后续提交后,binlog 里就有新值,主从数据就错位了
– 用 SELECT ... FOR UPDATE 锁住几行,误以为这能保护整库备份一致性——其实它只锁住当前事务看到的那几行,对其他事务的写入无约束力

  • FTWRL 锁住的是“物理表结构和缓存”,事务锁锁住的是“逻辑数据版本”
  • FTWRL 在 UNLOCK TABLES 或客户端断开后才释放;事务锁在事务 COMMIT 或 ROLLBACK 后立即释放
  • 监控 FTWRL 是否生效:查 SHOW PROCESSLIST 中状态为 Waiting for global read lock 的线程;查事务锁:用 SELECT * FROM information_schema.INNODB_TRX

生产环境推荐组合:--single-transaction + binlog position + 可选轻量 FTWRL

最常用也最稳妥的一致性备份路径是:先用 mysqldump --single-transaction --master-data=2 导出数据,它会在 dump 文件开头自动记录 CHANGE MASTER TO 所需的 binlog 文件名与位置(即一致性位点)。如果备份中包含非事务表,可在 dump 前加一段极短的 FTWRL(毫秒级),仅用于刷新并锁定这些表,立刻 unlock,再启动 dump。

容易被忽略的关键点:
– --master-data=2 记录的是执行 SHOW MASTER STATUS 的时刻,不是 dump 开始时刻;而 --single-transaction 的一致性快照是事务 START 的时刻——这两个时间点接近但不严格相等,不过对大多数场景可接受
– 若启用了 GTID,应改用 --set-gtid-purged=ON,否则恢复时可能因 GTID 冲突失败

  • 不要依赖 mysqldump --lock-all-tables,它本质就是 FTWRL,问题同上
  • Percona XtraBackup 虽底层也用 backup_lock(5.7+)或 FTWRL(5.6),但它在拷贝文件前会自动获取并记录精确的 binlog 位点,比手动组合更可靠
  • 备份后务必验证:用 mysqlcheck --check 校验表结构,用 diff 比对小样本数据,而不是只看 dump 文件大小

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2093

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1279

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

755

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2812

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

4688

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1079

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

4951

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

4402

2023.08.14

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 180人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 287人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn