先分清核心:缓存本身大多是临时文件,不是原始业务数据。删缓存≠删真实数据,但如果误操作连带删掉原始文件 / 数据库数据,才需要恢复;单纯清空缓存,原始数据一般还在原地。
一、先判断场景(非常关键)
只删除缓存文件(Redis 缓存、页面缓存、应用 cache 目录、浏览器缓存) 原始业务数据(数据库、磁盘文档)不会被删除,不需要恢复缓存,数据从源库重新加载即可。
例:Redis flushall,只是清缓存,MySQL 数据完好,访问业务会自动回写缓存。
误操作连带删除原始数据 删除缓存目录的时候,误删业务文件、数据库文件、配置、用户上传文件,这才是真正的数据丢失,需要下面的恢复手段。
二、数据库场景(Redis/MySQL/PostgreSQL 等)
1. Redis(清空缓存 flushall/flushdb)
如果只是缓存清空:不需要恢复缓存,业务访问自动回刷。
如果开启 RDB/AOF 持久化,且持久化文件没被删除: 停止 Redis,用 RDB 快照或者 AOF 日志恢复数据;
⚠️ 如果没有开启持久化,flushall 之后内存缓存数据彻底丢失,无法恢复。
2. MySQL
备份恢复:定时全量备份(mysqldump、xtrabackup)+ binlog 二进制日志,恢复到故障时间点。
磁盘误删数据文件:Linux 下进程还在运行,可以从
/proc/$pid/fd找回被删除文件句柄;一旦进程重启,句柄释放就失效。回收站:云数据库一般支持回滚 / 时间点恢复;自建库依赖备份 + binlog。
三、服务器磁盘文件(Linux / Windows,cache 目录误删连带业务文件)
Linux
进程句柄恢复(文件刚删除,进程没重启) 文件被 rm 删除,但打开该文件的进程还活着,内核不立刻释放磁盘块。
# 查找被删除文件lsof | grep '(deleted)'
lsof | grep '(deleted)'
# 从/proc恢复,pid为进程号,fd为文件描述符
cp /proc/<pid>/fd/<fd> /目标恢复路径
限制:重启服务 / 进程后该方法失效。
文件系统工具恢复
ext4:
extundelete,需要立刻卸载分区,不要再写入新数据(新写入会覆盖磁盘块)xfs:
xfs_repair+ xfsdump 备份恢复,xfs 删除文件很难直接反删恢复,优先依赖备份。
⚠️ 不要在丢失数据的分区继续写文件,会覆盖原始数据,永久无法找回。
Windows
回收站:如果是普通删除,先看回收站;shift + 删除绕过回收站。
卷影副本:开启系统保护,可以还原以前版本。
第三方磁盘恢复软件(Recuva 等),停止往该盘写入。
四、应用程序缓存(本地 App、浏览器缓存)
浏览器缓存清除:缓存图片、js 等临时资源清除,网页账号数据保存在服务端,本地缓存无法恢复用户数据。 客户端 App 缓存:清除缓存,本地缓存图片、缩略图丢失;业务数据存储在数据库,登录账号重新拉取。
五、容器 / Docker 环境删除缓存
删除容器、清空容器 cache:容器内数据,如果没有挂载 volume,容器销毁数据丢失;
有 volume 挂载:数据保存在宿主机 volume 目录,容器删除数据还在;
volume 被 rm 删除:只能依靠备份,磁盘恢复工具尝试恢复 volume 底层文件。
六、云平台对象存储(OSS/S3)
缓存一般是 CDN 缓存,清 CDN 缓存不会删除源站 OSS 文件; 如果误删 OSS 源文件:开启版本控制、回收站,可以恢复;没开启则无法恢复。
七、优先级总结(恢复手段按可靠程度排序)
备份恢复【最可靠首选】:全量备份 + 增量 / 日志,不管缓存怎么删,原始数据从备份还原。
进程句柄恢复:Linux 刚删文件,进程未重启,短时应急手段。
文件系统磁盘恢复工具:成功率不确定,禁止写入新数据。
持久化日志恢复(AOF/binlog):数据库场景。
❌ 无备份、无持久化、文件块被新数据覆盖:数据彻底无法恢复。
八、避坑建议
删除缓存脚本,不要直接 rm -rf /* 或者 rm -rf cache/* ,避免通配符误删上级目录业务数据;
Redis 务必开启 RDB/AOF 持久化;
生产环境不要依赖缓存作为数据源,缓存只是加速层,真实数据必须落库 + 定期备份。