首页/数据/备份与容灾速查/应用一致性备份

应用一致性备份

在备份前让应用进入可静默状态(冻结写入、刷盘、完成检查点),保证快照或文件副本在恢复后可直接使用。

备份与容灾速查数据更新于 2026-10-13

应用一致性备份是什么

应用一致性备份在取数据前先让应用进入可静默状态:冻结写入、把内存中的脏数据刷到磁盘、完成检查点,必要时把事务日志与数据文件对齐到同一时间点。恢复后数据库能直接打开而不必长时间重放日志。与之相对的是崩溃一致性副本,恢复时还要走一遍自身的崩溃恢复流程。

基本信息

常用手段应用静默接口、检查点、快照钩子脚本、备份模式锁、事务日志配合
典型案例MySQL LOCK INSTANCE FOR BACKUP、PostgreSQL 备份模式、SQL Server 备份 API、Windows VSS 编写器
适用对象运行中的数据库、消息队列、邮件系统等有内存缓冲的服务
权限要求需要应用的备份专用权限或数据库超级用户权限

典型使用场景

  • 数据库在线备份:备份期间业务不中断,但副本必须可直接起库
  • 存储快照前的静默:让快照落在事务边界上,避免起库重放耗时过长
  • 多云或跨区复制:源端应用进入静默后取副本,减少远端起库失败概率
  • 虚拟机备份:虚拟机内应用静默 + 卷级快照,恢复后应用直接可用
  • 重大变更前留底:变更窗口前做一份应用一致副本,回退时快速回滚

MySQL 应用一致快照流程(示意)

MySQL 应用一致快照流程(示意)
# 1) 非事务引擎或需要位点信息时,先加全局读锁并记录位点
mysql -e "FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;"
# 2) 触发存储快照,或让备份工具读取快照数据目录
# 3) 快照完成立刻释放锁,缩短业务写入阻塞时间
mysql -e "UNLOCK TABLES;"
# 4) 纯 InnoDB 场景可用备份锁替代读锁:不阻塞事务提交
mysql -e "LOCK INSTANCE FOR BACKUP;"   # 完成后 UNLOCK INSTANCE

三类一致性对照

类型恢复后状态要做的额外动作
崩溃一致性文件系统可挂载,应用数据可能有半个事务起库时执行应用自身的崩溃恢复,耗时不可控
应用一致性事务边界上的完整状态,可直接使用备份前需执行静默/检查点,占用短暂窗口
逻辑一致性导出SQL 或逻辑副本,与物理结构解耦导出与恢复都慢,适合中小数据量与跨版本迁移
MySQL 8.0 中纯 InnoDB 场景可用 mysqldump --single-transaction 做逻辑一致性导出;物理快照通常推荐 LOCK INSTANCE FOR BACKUP(不阻塞 DML,只挡 DDL 与部分管理操作)或配合停写窗口。
静默窗口是有代价的:锁或检查点期间写入被阻塞,必须控制快照耗时并在完成后立即释放,且脚本要有异常路径下的解锁收尾。

易错点

  • 锁表期间业务写入被阻塞:窗口从秒级拖到分钟级,业务报错堆积,必须在快照返回后立即释放
  • 只对数据目录做文件拷贝而不停写也不加锁:恢复出的库出现页损坏或事务截断
  • 静默脚本没有超时与兜底:快照任务卡住时锁一直不释放,需要人工登录排查
  • 把备份锁当作完全无影响:LOCK INSTANCE FOR BACKUP 会挡住 DDL 与部分清理操作,长窗口下同样可能影响发布

数据来源与参考

  • MySQL 8.0 Reference Manual(FLUSH TABLES WITH READ LOCK 与备份方法章节)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌