Debian Redis数据恢复方法
小樊
37
2025-12-23 02:01:45
Debian 上 Redis 数据恢复实用指南
一 恢复前的关键判断
- 确认持久化配置与文件位置:查看是否开启 RDB 或 AOF,以及数据目录与文件名。
- 查看目录:config get dir
- 查看 RDB 文件名:config get dbfilename(默认 dump.rdb)
- 查看 AOF 文件名与开关:config get appendfilename / config get appendonly
- 判断可用备份:常见位置为 /var/lib/redis/(RDB 默认 dump.rdb,AOF 默认 appendonly.aof),以及最近的 RDB 快照 或 AOF 文件。若两者同时存在,Redis 启动时会优先使用 AOF 进行恢复(更完整)。
二 使用 RDB 快照恢复
- 准备与校验
- 建议先停止 Redis:sudo systemctl stop redis
- 备份现有数据目录:cp -a /var/lib/redis /var/lib/redis.bak_$(date +%F)
- 恢复步骤
- 将备份的 dump.rdb 复制到数据目录(路径以 config get dir 为准):
- cp /path/to/dump.rdb /var/lib/redis/dump.rdb
- 修正属主属组(Debian 常见为 redis:redis):
- chown redis:redis /var/lib/redis/dump.rdb
- 启动服务并校验:
- sudo systemctl start redis
- redis-cli ping(应返回 PONG)
- 按需检查关键 key 或 dbsize
- 仅导入 RDB 到运行中的实例(不覆盖现有数据)
- 使用 redis-cli 的 RDB 导入:redis-cli --rdb /path/to/dump.rdb
- 注意
- SAVE 会阻塞主进程,BGSAVE 在后台 fork 子进程,生产环境优先用 BGSAVE 做快照。
三 使用 AOF 日志恢复
- 准备与校验
- 建议先停止 Redis:sudo systemctl stop redis
- 备份现有数据目录:cp -a /var/lib/redis /var/lib/redis.bak_$(date +%F)
- 恢复步骤
- 将备份的 appendonly.aof 复制到数据目录(路径以 config get dir 为准):
- cp /path/to/appendonly.aof /var/lib/redis/appendonly.aof
- 修正属主属组:chown redis:redis /var/lib/redis/appendonly.aof
- 启动服务并校验:
- sudo systemctl start redis
- redis-cli ping(应返回 PONG)
- 检查 aof 是否启用:config get appendonly(应为 yes)
- 仅导入 AOF 到运行中的实例(管道重放)
- 通过管道将 AOF 重放到目标实例:cat /path/to/appendonly.aof | redis-cli --pipe
- 说明
- AOF 记录了写命令序列,通常能恢复到故障前的更近状态;文件较大时重放耗时更长。
四 无持久化或误删后的补救与迁移
- 无持久化或仅有内存数据
- 若此前未开启 RDB/AOF 且无外部备份,通常无法从 Redis 内部恢复已丢失数据;应尽快建立定期快照与复制机制,避免再次丢失。
- 逻辑备份与恢复(跨版本/跨实例迁移友好)
- 使用 redis-dump/redis-load(Ruby 工具链)导出为 JSON 再导入:
- 导出:redis-dump -u :password@127.0.0.1:6379 > data.json
- 导入:cat data.json | redis-load -u :password@127.0.0.1:6379
- 指定库:redis-dump -u … -d 8 > data8.json;导入时同样用 -d 8
- 远程/在线备份与恢复
- 远程导出 RDB:redis-cli -h HOST -a PASS --rdb /path/to/dump.rdb
- 远程导入 RDB:redis-cli -h HOST -a PASS --pipe < /path/to/dump.rdb
- 文件与权限要点
- 确认 dir、dbfilename、appendfilename 配置;恢复后确保文件属主为 redis:redis,避免启动失败或权限错误。