#!/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] 完成"