1361 字
约 4 分钟
7
手动创建快照

备份与恢复概述

Redis 数据备份与恢复是保障数据安全的重要手段。Redis 提供了两种主要的持久化方式:RDB 快照和 AOF 日志,以及多种备份策略来确保数据的可靠性和可恢复性。

📸 RDB 快照备份

RDB(Redis Database)是 Redis 的默认持久化方式,通过创建数据快照来备份数据:

# 手动创建快照
SAVE
# 或者异步创建快照(推荐)
BGSAVE

# 查看最后一次快照时间
LASTSAVE

# 配置自动快照
# 在 redis.conf 中设置
save 900 1      # 900秒内至少1个key发生变化
save 300 10     # 300秒内至少10个key发生变化
save 60 10000   # 60秒内至少10000个key发生变化

# 运行时配置
CONFIG SET save "900 1 300 10 60 10000"

RDB 特点:紧凑性:文件小,适合备份和传输恢复快:启动时恢复速度快性能好:对 Redis 性能影响小数据丢失:可能丢失最后一次快照后的数据

📝 AOF 日志备份

AOF(Append Only File)通过记录每个写操作来实现持久化:

# 启用 AOF
CONFIG SET appendonly yes

# 设置 AOF 文件名
CONFIG SET appendfilename "appendonly.aof"

# 设置同步策略
CONFIG SET appendfsync everysec  # 每秒同步(推荐)
# CONFIG SET appendfsync always    # 每次写入同步(最安全但慢)
# CONFIG SET appendfsync no        # 由操作系统决定(最快但不安全)

# 手动重写 AOF 文件
BGREWRITEAOF

# 配置自动重写
CONFIG SET auto-aof-rewrite-percentage 100
CONFIG SET auto-aof-rewrite-min-size 64mb
同步策略 安全性 性能 数据丢失风险
always 最高 最慢 几乎无
everysec 较高 较快 最多1秒
no 最低 最快 可能较多

🔄 混合持久化

Redis 4.0 引入了 RDB-AOF 混合持久化,结合两者优势:

# 启用混合持久化
CONFIG SET aof-use-rdb-preamble yes

# 查看配置
CONFIG GET aof-use-rdb-preamble

混合持久化优势:AOF 文件开头是 RDB 格式,恢复速度快AOF 文件后续是增量命令,数据完整性好文件大小相对较小兼顾了性能和数据安全

📋 备份策略

制定合适的备份策略确保数据安全:

#!/bin/bash
# Redis 备份脚本示例

# 设置变量
REDIS_CLI="redis-cli"
BACKUP_DIR="/backup/redis"
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p $BACKUP_DIR

# 执行 RDB 备份
$REDIS_CLI BGSAVE

# 等待备份完成
while [ $($REDIS_CLI LASTSAVE) -eq $($REDIS_CLI LASTSAVE) ]; do
    sleep 1
done

# 复制 RDB 文件
cp /var/lib/redis/dump.rdb $BACKUP_DIR/dump_$DATE.rdb

# 复制 AOF 文件(如果启用)
if [ -f /var/lib/redis/appendonly.aof ]; then
    cp /var/lib/redis/appendonly.aof $BACKUP_DIR/appendonly_$DATE.aof
fi

# 压缩备份文件
tar -czf $BACKUP_DIR/redis_backup_$DATE.tar.gz $BACKUP_DIR/*_$DATE.*

# 删除7天前的备份
find $BACKUP_DIR -name "redis_backup_*.tar.gz" -mtime +7 -delete

🔧 数据恢复

从备份文件恢复 Redis 数据:

# 1. 停止 Redis 服务
sudo systemctl stop redis

# 2. 备份当前数据文件(可选)
cp /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.backup

# 3. 恢复 RDB 文件
cp /backup/redis/dump_20231201_120000.rdb /var/lib/redis/dump.rdb

# 4. 恢复 AOF 文件(如果使用)
cp /backup/redis/appendonly_20231201_120000.aof /var/lib/redis/appendonly.aof

# 5. 设置正确的文件权限
chown redis:redis /var/lib/redis/dump.rdb
chown redis:redis /var/lib/redis/appendonly.aof

# 6. 启动 Redis 服务
sudo systemctl start redis

# 7. 验证数据恢复
redis-cli
127.0.0.1:6379> KEYS *
127.0.0.1:6379> INFO keyspace

注意:恢复数据前请确保 Redis 服务已停止,并备份当前数据以防意外。

🚨 灾难恢复

应对严重故障的恢复策略:

灾难恢复步骤:评估损失:确定数据丢失程度选择备份:选择最近的可用备份环境准备:准备恢复环境数据恢复:执行数据恢复操作验证测试:验证数据完整性服务恢复:恢复业务服务

# 灾难恢复脚本示例
#!/bin/bash

echo "开始 Redis 灾难恢复..."

# 1. 停止相关服务
sudo systemctl stop redis
sudo systemctl stop application

# 2. 清理损坏的数据
rm -f /var/lib/redis/dump.rdb
rm -f /var/lib/redis/appendonly.aof

# 3. 从最新备份恢复
latest_backup=$(ls -t /backup/redis/redis_backup_*.tar.gz | head -1)
tar -xzf $latest_backup -C /tmp/

# 4. 恢复数据文件
cp /tmp/backup/redis/dump_*.rdb /var/lib/redis/dump.rdb
cp /tmp/backup/redis/appendonly_*.aof /var/lib/redis/appendonly.aof

# 5. 设置权限
chown redis:redis /var/lib/redis/*

# 6. 启动服务
sudo systemctl start redis
sudo systemctl start application

echo "灾难恢复完成"

📊 备份监控

监控备份状态和数据完整性:

# 检查备份状态
redis-cli INFO persistence

# 检查 RDB 文件
redis-cli LASTSAVE
redis-cli CONFIG GET save

# 检查 AOF 状态
redis-cli CONFIG GET appendonly
redis-cli CONFIG GET appendfsync

# 验证数据完整性
redis-cli --rdb /tmp/dump.rdb
redis-cli --check-rdb /var/lib/redis/dump.rdb
redis-cli --check-aof /var/lib/redis/appendonly.aof
监控项 命令 说明
最后备份时间 LASTSAVE 返回最后一次成功备份的时间戳
备份配置 CONFIG GET save 查看自动备份配置
AOF 状态 INFO persistence 查看 AOF 相关状态
文件检查 --check-rdb/aof 检查备份文件完整性

💡 最佳实践

Redis 备份与恢复的最佳实践:

备份最佳实践:同时启用 RDB 和 AOF,使用混合持久化定期测试备份文件的完整性将备份文件存储到不同的物理位置建立自动化备份和监控机制制定详细的恢复流程文档定期进行恢复演练

重要提醒:备份策略应该根据业务需求制定,平衡数据安全性和系统性能。

手动创建快照
https://clxhxhhr.top/posts/2831/
作者
clxstart
发布于
2026-09-19
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。
☰ 文章目录