#!/bin/bash # 数据库备份脚本 # 使用方法: ./scripts/backup.sh set -e # 配置变量 DB_HOST="${DB_HOST:-localhost}" DB_NAME="${DB_NAME:-photography}" DB_USER="${DB_USER:-postgres}" BACKUP_DIR="/home/gitea/backups/database" DATE=$(date +%Y%m%d-%H%M%S) echo "🗄️ 开始数据库备份..." # 创建备份目录 mkdir -p "$BACKUP_DIR" # 检查数据库连接 echo "🔍 检查数据库连接..." if ! pg_isready -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME"; then echo "❌ 数据库连接失败" exit 1 fi # 执行备份 echo "📦 执行数据库备份..." pg_dump -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" \ --no-password --verbose --clean --no-acl --no-owner \ -f "$BACKUP_DIR/photography-$DATE.sql" # 检查备份文件 if [ ! -f "$BACKUP_DIR/photography-$DATE.sql" ]; then echo "❌ 备份文件创建失败" exit 1 fi # 压缩备份文件 echo "🗜️ 压缩备份文件..." gzip "$BACKUP_DIR/photography-$DATE.sql" # 检查压缩文件 if [ ! -f "$BACKUP_DIR/photography-$DATE.sql.gz" ]; then echo "❌ 备份文件压缩失败" exit 1 fi # 设置权限 chmod 600 "$BACKUP_DIR/photography-$DATE.sql.gz" chown gitea:gitea "$BACKUP_DIR/photography-$DATE.sql.gz" # 清理旧备份 (保留最近7天) echo "🧹 清理旧备份..." find "$BACKUP_DIR" -name "photography-*.sql.gz" -mtime +7 -delete echo "✅ 数据库备份完成!" echo "📁 备份文件: $BACKUP_DIR/photography-$DATE.sql.gz" echo "📊 文件大小: $(du -sh $BACKUP_DIR/photography-$DATE.sql.gz | cut -f1)" # 显示备份统计 echo "📈 备份统计:" echo " 总备份数: $(ls -1 $BACKUP_DIR/photography-*.sql.gz | wc -l)" echo " 总备份大小: $(du -sh $BACKUP_DIR | cut -f1)" echo " 最新备份: $(ls -t $BACKUP_DIR/photography-*.sql.gz | head -n 1)"