linux

Redis在Linux上的备份策略

小樊
38
2025-12-14 12:49:42
栏目: 云计算

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

四 恢复流程与注意事项

五 监控校验与加固建议

0
看了该问题的人还看了