快照回滚后数据回退了
发布时间:2026-09-04 13:38       
更新时间:2026-09-04 22:28
数据回到几天前,不是回滚出了故障,而是快照回滚本来就是这个行为:整块盘被恢复到创建快照那一刻的状态,快照之后的所有写入都会消失。
回滚的范围要先弄清
系统盘快照只还原系统盘,数据盘快照只还原对应的数据盘,两者互不影响。回滚之后,补丁、日志、上传的附件、新写入的数据库记录,凡是快照点之后产生的,统统不在了。不少人以为回滚只影响某个目录,实际是整盘级别的操作。另外,回滚通常要求实例关机,耗时与数据量相关,几十 GB 的盘一般几分钟到十几分钟,期间业务完全不可用,挑低谷时段操作。
回滚前先把新数据捞出来
如果平台支持从快照创建新磁盘,优先走这条路:给当前盘打一个新快照留底,再用旧快照创建一块新盘挂到临时实例上,把需要的文件拷出来,最后才决定要不要回滚。来不及这么细,至少把数据库先导一份:
mysqldump -u root -p --all-databases > /backup/db_$(date +%F).sql
导出文件传到异地或本地保存,再执行回滚。
快照与备份是两回事
快照是磁盘级别的副本,恢复以盘为单位;备份是文件级别的,能只恢复一张表、一个目录。要精细恢复,靠的是 mysqldump 和 tar 这类应用层手段。快照之后的增量数据,平台侧没有现成手段找回,只能依赖应用层备份,这也是重要业务要用双轨制的原因:定时快照管整机兜底,应用层导出管细粒度恢复。
预防动作
定时快照按天设置,大变更前手动再打一次;快照有存储成本,保留最近七天加每月一个长期点是常见策略,过期自动删除的规则要检查一遍;数据库每天定时导出并保留最近七天;每次回滚后,先检查定时任务、监控探针这些容易被遗忘的组件是否正常。