29 lines
902 B
Bash
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] 完成"
|