#!/bin/sh # PostgreSQL 自动备份脚本 set -e BACKUP_DIR="/backups" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/backup_$DATE.sql.gz" echo "开始备份 PostgreSQL 数据库:$DATE" # 创建备份目录 mkdir -p $BACKUP_DIR # 执行备份 PGPASSWORD=$POSTGRES_PASSWORD pg_dump \ -h $POSTGRES_HOST \ -U $POSTGRES_USER \ -d $POSTGRES_DB \ --no-owner \ --no-acl \ | gzip > $BACKUP_FILE # 检查备份是否成功 if [ -f "$BACKUP_FILE" ]; then BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1) echo "备份完成:$BACKUP_FILE (大小: $BACKUP_SIZE)" else echo "备份失败!" exit 1 fi # 删除 30 天前的备份 find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +30 -delete echo "已清理 30 天前的备份文件" echo "备份任务完成"