首页/数据/数据库速查/云盘快照备份与一致性
备份与恢复56 条

云盘快照备份与一致性

云数据库/云盘快照是最省事的方案,但「运行中直接拍快照」的崩溃一致性对非事务引擎不保证;稳妥做法是锁表快照或快照+PXB 双层。

数据库速查数据更新于 2026-10-13

云盘快照备份是什么

云数据库与云盘快照按块设备即时打点,几分钟就能完成全量副本,恢复时直接挂载,是恢复速度最快的一类备份。但「运行中直接拍快照」只保证崩溃一致性:对 InnoDB 来说等价于一次断电后重启,数据能自洽;对非事务引擎的表(如 MyISAM)不保证。要求更严格的一致性时,用 FLUSH TABLES WITH READ LOCK 短暂锁表再拍快照。

基本信息

适用对象云硬盘 / 云数据库实例的块级快照
一致性级别InnoDB 崩溃一致性可用;非事务引擎需锁表
锁表语句FLUSH TABLES WITH READ LOCK(简称 FTWRL)
释放方式同会话执行 UNLOCK TABLES,或会话断开自动释放
常见组合快照负责快速恢复,逻辑备份负责应对误删表

典型使用场景

  • 重大变更前打点:DDL 或数据订正前先拍一份,出问题能快速回退整机
  • 缩短恢复时间目标:相比逻辑备份还原,快照挂载恢复通常快一个量级
  • 跨可用区复制:把快照复制到其他区域,作为异地容灾的基础镜像
  • 环境复制:用生产快照快速拉起测试环境,数据规模不需要重新导入
  • 作为物理备份的上游:从快照挂载的盘上再跑一次逻辑备份,避免直连生产

一致性快照流程

一致性快照流程
-- 会话 A:锁表,阻塞写入保证落盘数据静止
FLUSH TABLES WITH READ LOCK;
-- 此时在控制台或 API 触发云盘快照,等待快照状态变为可用
-- 会话 B(另开连接)确认锁状态与长事务情况
SHOW PROCESSLIST;
SELECT * FROM information_schema.innodb_trx\G
-- 快照完成后回到会话 A 解锁
UNLOCK TABLES;
-- 事后核对:记录快照时间点,供 PITR 计算位点

一致性方案对照

方案一致性保证代价
运行中直接拍快照InnoDB 崩溃一致,非事务引擎不保证零停顿,短暂影响挂载盘的 IO
FTWRL 后拍快照数据静止,全引擎一致锁表期间写入全部阻塞,含 DDL
快照 + 逻辑备份双轨物理层可快速恢复,逻辑层可单表回补需要维护两套策略与存储成本
FTWRL 会阻塞所有写入与 DDL,必须在低峰窗口执行,并提前确认没有长事务在跑;持锁会话断线会自动释放锁,容易造成「拍出来其实不一致」的假象,锁期间需要有监控确认锁一直生效。
快照只覆盖块设备上的数据,不包含误删表、错误 UPDATE 这类逻辑错误的历史版本:快照拍下之后发生的误操作同样会被回滚到快照状态,所以逻辑备份必须保留。

易错点

  • 只依赖快照:误删表或批量错改数据时,只能整体回到快照点,期间所有正常业务写入一起丢失
  • 锁表拍快照时没检查长事务:FTWRL 会一直等长事务结束,锁等待期间写入堆积,恢复写入后出现尖峰
  • 在非事务引擎的表上假设快照一致:MyISAM 表可能处于不一致状态,恢复后需要额外校验与修复
  • 把快照留在同一可用区同一存储:整区域故障时数据与快照同时不可用,异地复制必须单独配置
  • 快照恢复演练没做过:真要恢复时才发现挂载流程、账号权限或目录结构需要额外准备,恢复时间远超预期

数据来源与参考

  • MySQL 8.0 Reference Manual: FLUSH TABLES WITH READ LOCK
  • 云厂商快照最佳实践文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌