使用 RDB 快照备份:Redis 的 RDB 是点-in-time 快照,可以通过配置 save 参数自动备份,或手动执行 BGSAVE 命令生成 dump.rdb 文件导出数据。迁移时,将 RDB 文件复制到新服务器,重启 Redis 加载即可。结合 AOF 日志,确保数据安全,使用 redis-check-aof 修复 AOF 文件。代码示例:
redis-cli --rdb /path/to/dump.rdb # 导出RDB
BGSAVE # 后台保存
对于备份迁移难题,停服前执行 BGSAVE 获取最新快照,传输后在新实例加载,并验证数据一致性,避免丢失。
方法一:RDB 快照导出
RDB 是 Redis 最常用的持久化方式,它会定期将内存中的数据快照保存到磁盘上的 dump.rdb 文件中。你可以通过以下命令手动触发 RDB 快照生成:
BGSAVE # 后台生成 RDB 文件
SAVE # 前台生成 RDB 文件(阻塞)
生成后,直接复制 dump.rdb 文件到其他地方就是备份了。迁移时,新服务器上启动 Redis,并指定 dir 和 dbfilename 参数加载该文件。
AOF 日志备份与恢复
AOF(Append Only File)记录了每一个写操作,数据丢失风险更低。配置 appendonly yes 启用。备份就是复制 appendonly.aof 文件。恢复时使用 redis-check-aof fix 修复文件,然后 Redis 重启自动回放。迁移难题解决:先停止写操作,执行 BGREWRITEAOF 压缩 AOF,传输后在新环境加载,确保安全。
使用 redis-cli 导出数据
redis-cli 支持直接导出键值对:
redis-cli -h host -p port --rdb new.rdb # 从远程导出RDB
或逐键导出:redis-cli keys "*" | xargs -n1 redis-cli dump > data.dump
对于大实例,避免全量 keys,使用 SCAN 命令迭代导出。备份迁移时,结合主从复制,先建从库同步数据,再切换。
主从复制与哨兵实现零丢失迁移
搭建主从结构,从节点 replicaof 主节点地址,数据实时同步。备份从从节点 RDB/AOF。迁移:提升从节点为主节点,更新客户端配置。哨兵模式 sentinel monitor 自动故障转移。保证安全:配置 min-replicas-to-write 拒绝写操作如果从节点不足,避免脑裂数据丢失。
工具辅助:RDBTools 和 redis-dump-go
RDBTools 可以分析和转换 RDB 文件:rdb -c protocol dump.rdb | redis-cli 新host
redis-dump-go 导出 JSON:redis-dump-go --server host:port > data.json
迁移难题:用这些工具验证数据一致性,diff 对比新旧实例键数量和采样值,确保不丢失。
完整备份迁移流程
1. 停止客户端写(只读模式)。2. 执行 BGSAVE 获取最新 RDB。3. 复制 RDB 和 AOF 到新服务器。4. 新服务器加载 RDB,回放 AOF。5. 验证数据:redis-cli --bigkeys 检查大键,info stats 比对数量。6. 切换流量。安全不丢失:多副本备份,监控持久化状态。
FAQ
Q: RDB 和 AOF 哪个更好?
A: RDB 适合冷备份恢复快,AOF 数据更全,建议两者结合。
Q: 大数据量如何避免导出卡住?
A: 用 BGSAVE 后台操作,主从同步分担。
Q: 迁移验证怎么做?
A: 对比键总数、大键、采样值一致性。
Q: 云上 Redis 如阿里云怎么备份?
A: 用控制台一键备份,或 API 调用快照导出。