Redis 备份与恢复怎么做
Redis 的持久化产物是 RDB 快照与 AOF 追加日志。备份的常规做法是在线触发一次 BGSAVE 生成快照,或直接用 redis-cli --rdb 把快照拉到本地文件;恢复时停机替换持久化文件再启动,启动前先用 redis-check-rdb 校验完整性,否则可能读到损坏文件后实例直接拒绝启动。
基本信息
| 适用平台 | Redis 5.0 及以上(集群模式与哨兵模式要点相近) |
|---|---|
| 备份手段 | BGSAVE 后台生成快照;redis-cli --rdb 直接拉取快照文件 |
| 校验工具 | redis-check-rdb 校验快照;AOF 场景用 redis-check-aof |
| 恢复前提 | 实例停机、持久化文件路径与文件名与配置一致、属主正确 |
典型使用场景
- 日常全量备份:定时 BGSAVE 并把快照复制到对象存储或备份机
- 发布前留底:结构变更或数据迁移前先拉一份 RDB 存底
- 灾难恢复:实例数据目录损坏时用最近快照重建
- 集群备份:从副本节点导出,避免影响主节点性能
- 跨环境取数:把快照拉到测试环境恢复一份数据用于验证
备份
备份
# 后台生成快照(生产大实例建议在副本节点执行)
redis-cli BGSAVE
# 确认快照完成时间戳是否更新
redis-cli LASTSAVE
# 远程拉取快照文件到备份机,不落地在实例所在磁盘
redis-cli --rdb /backup/redis-$(date +%F).rdb
# 校验产物完整性
redis-check-rdb /backup/redis-$(date +%F).rdb恢复
恢复
# 停实例,避免持久化文件被占用或覆盖
sudo systemctl stop redis
# 替换快照文件并修正属主
sudo cp /backup/redis-2026-10-13.rdb /var/lib/redis/dump.rdb
sudo chown redis:redis /var/lib/redis/dump.rdb
# 启动后确认数据量是否与备份时间点相符
sudo systemctl start redis
redis-cli DBSIZE持久化与备份要点
| 项 | 说明 | 注意点 |
|---|---|---|
| RDB 快照 | 某一时间点的全量数据文件 | BGSAVE 会 fork 子进程,大实例注意内存与延迟抖动 |
| AOF | 追加写日志,恢复更完整但体积大 | 已开启 AOF 时实例优先加载 AOF,只替换 RDB 可能不生效 |
| LASTSAVE | 最近一次成功生成快照的时间戳 | 数值未更新说明快照实际没生成成功 |
| redis-check-rdb | 校验快照文件完整性 | 恢复前必做,避免读到损坏文件后实例起不来 |
| 集群模式 | 各分片各自持有数据 | 备份需覆盖全部分片,缺片即数据不完整 |
开启 appendonly 的实例优先从 AOF 恢复:只替换 dump.rdb 可能看不到任何变化,恢复前先确认实例的持久化配置。
避免在大内存主节点上频繁执行 BGSAVE:fork 与磁盘写入会带来明显延迟抖动,必要时改在副本节点备份。