温馨提示×

Debian Redis数据恢复方法

小樊
37
2025-12-23 02:01:45
栏目: 云计算

Debian 上 Redis 数据恢复实用指南

一 恢复前的关键判断

  • 确认持久化配置与文件位置:查看是否开启 RDBAOF,以及数据目录与文件名。
    • 查看目录: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
  • 文件与权限要点
    • 确认 dirdbfilenameappendfilename 配置;恢复后确保文件属主为 redis:redis,避免启动失败或权限错误。

0