Files
water-management-system/deploy/production/backup.sh
T

29 lines
902 B
Bash

#!/usr/bin/env bash
# 数据备份策略(Issue #91):PostgreSQL 每日全量 + WAL 增量,保留 30 天,异地同步
set -euo pipefail
BACKUP_DIR="${BACKUP_DIR:-/var/backups/wms}"
RETENTION_DAYS="${RETENTION_DAYS:-30}"
PG_CONTAINER="${PG_CONTAINER:-wms-postgres}"
PG_DB="${PG_DB:-wms}"
PG_USER="${PG_USER:-wms}"
REMOTE="${BACKUP_REMOTE:-}" # 例:rsync://backup.xayunmei.local/wms
ts="$(date +%F_%H%M%S)"
mkdir -p "$BACKUP_DIR"
file="$BACKUP_DIR/pg_${PG_DB}_${ts}.sql.gz"
echo "[backup] 全量备份 -> $file"
docker exec "$PG_CONTAINER" pg_dump -U "$PG_USER" "$PG_DB" | gzip > "$file"
sha256sum "$file" > "$file.sha256"
echo "[backup] 清理 ${RETENTION_DAYS} 天前的备份"
find "$BACKUP_DIR" -name 'pg_*.sql.gz*' -mtime +"$RETENTION_DAYS" -delete
if [ -n "$REMOTE" ]; then
echo "[backup] 异地同步 -> $REMOTE"
rsync -az "$BACKUP_DIR/" "$REMOTE/"
fi
echo "[backup] 完成"