Redis在Linux上的备份策略
一 持久化基础与取舍
二 备份策略与保留周期
三 自动化脚本与定时任务示例
#!/usr/bin/env bash
set -Eeuo pipefail
DATA_DIR="/var/lib/redis/6379"
BACKUP_BASE="/usr/local/redis/snapshotting"
DATE_HOUR=$(date +%Y%m%d%H)
KEEP_HOURS=48
# 创建目标目录
mkdir -p "$BACKUP_BASE/$DATE_HOUR"
# 等待一次BGSAVE完成(避免拿到不完整快照)
redis-cli bgsave
while :; do
sleep 2
[[ $(redis-cli info Persistence | awk -F: '/rdb_bgsave_in_progress/{gsub(/\r/,""); print $2}') -eq 0 ]] && break
done
# 原子拷贝
cp -a "$DATA_DIR/dump.rdb" "$BACKUP_BASE/$DATE_HOUR/dump.rdb"
# 清理过期
DEL_HOUR=$(date -d "-${KEEP_HOURS} hours" +%Y%m%d%H)
rm -rf "$BACKUP_BASE/$DEL_HOUR"
echo "$(date) Hourly backup completed: $BACKUP_BASE/$DATE_HOUR/dump.rdb"
#!/usr/bin/env bash
set -Eeuo pipefail
DATA_DIR="/var/lib/redis/6379"
BACKUP_BASE="/usr/local/redis/snapshotting"
DATE_DAY=$(date +%Y%m%d)
KEEP_DAYS=30
mkdir -p "$BACKUP_BASE/$DATE_DAY"
redis-cli bgsave
while :; do
sleep 2
[[ $(redis-cli info Persistence | awk -F: '/rdb_bgsave_in_progress/{gsub(/\r/,""); print $2}') -eq 0 ]] && break
done
cp -a "$DATA_DIR/dump.rdb" "$BACKUP_BASE/$DATE_DAY/dump.rdb"
DEL_DAY=$(date -d "-${KEEP_DAYS} days" +%Y%m%d)
rm -rf "$BACKUP_BASE/$DEL_DAY"
echo "$(date) Daily backup completed: $BACKUP_BASE/$DATE_DAY/dump.rdb"
# 每小时执行一次RDB备份
0 * * * * /usr/bin/bash /usr/local/redis/scripts/redis_rdb_hourly.sh >> /var/log/redis_backup.log 2>&1
# 每天零点执行一次日级RDB备份
0 0 * * * /usr/bin/bash /usr/local/redis/scripts/redis_rdb_daily.sh >> /var/log/redis_backup.log 2>&1
0 2 * * * rsync -avz --delete /usr/local/redis/snapshotting/ backup@backup.example.com:/data/redis/ >> /var/log/redis_backup_rsync.log 2>&1
四 恢复流程与注意事项
五 监控校验与加固建议