第一步,检查Redis持久化配置:使用redis-cli命令连接Redis,执行CONFIG GET save查看是否开启RDB快照,CONFIG GET appendonly查看AOF日志。如果AOF开启,数据丢失后直接执行BGREWRITEAOF命令重写AOF文件,然后重启Redis就能恢复大部分数据。
从RDB文件恢复
如果你的Redis配置了RDB快照,数据丢失时先停止Redis服务,避免覆盖文件。然后将最近的dump.rdb文件复制到Redis数据目录,修改redis.conf中的dbfilename指向这个文件,重启Redis服务,数据就回来了。注意备份原文件!
AOF文件修复教程
AOF文件损坏常见于突然断电。方法:停止Redis,用redis-check-aof --fix appendonly.aof命令修复AOF文件。如果失败,手动编辑appendonly.aof,删除最后几行不完整命令,从上一个完整命令开始,保存后重启Redis,就能恢复到上次完整写入。
从内存dump恢复
紧急情况下,用redis-cli --bigkeys命令扫描大key,SAVE命令手动触发RDB快照生成。然后停止服务,替换dump.rdb,重启。或者用RDB工具如rdbtools dump命令解析rdb文件,提取关键key手动SET回去。
预防数据丢失
配置save 900 1和save 300 10同时开启AOF,appendonly yes,appendfsync everysec。定期备份RDB和AOF到远程存储。业务代码加事务管道,确保写操作原子性。
真实案例恢复
一次生产事故,Redis主从切换AOF丢失,用redis-check-aof fix修复后,只丢了1分钟数据。另一个用rdbtools解析dump.rdb,脚本批量恢复用户session,避免了下线。
工具推荐
下载rdb-aof-tools工具包,包含redis-check-rdb和redis-check-aof。用redis-cli MONITOR实时查看命令历史,回放关键操作。
FAQ
Q: Redis数据全丢了还能恢复吗?
A: 如果没开启持久化,几乎不可能,只能从业务数据库回滚。
Q: AOF修复失败怎么办?
A: 备份原文件,手动截断到最后一个*3
$xx
cmd args结束。
Q: 主从复制能防丢失吗?
A: 从库可能同步不全,结合持久化用。
Q: 怎么快速备份Redis?
A: BGSAVE后台生成RDB,或cp复制AOF文件。