#!/bin/bash # StarFireAPI 数据库备份脚本 # 用途:备份 PostgreSQL 数据库 # 使用:bash backup_database.sh # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 配置 PROJECT_DIR="/opt/xinghuoapi" BACKUP_DIR="$PROJECT_DIR/backups" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/starfireapi_backup_${DATE}.sql.gz" echo -e "${BLUE}==========================================" echo "💾 StarFireAPI 数据库备份" echo -e "==========================================${NC}" echo "" # 创建备份目录 mkdir -p "$BACKUP_DIR" # 检查容器是否运行 cd "$PROJECT_DIR/deploy" if ! docker-compose ps | grep -q "postgres.*Up"; then echo -e "${RED}❌ PostgreSQL 容器未运行${NC}" exit 1 fi echo -e "${YELLOW}📦 开始备份数据库...${NC}" echo "备份文件: $BACKUP_FILE" echo "" # 执行备份 docker exec sub2api-postgres pg_dump -U sub2api sub2api | gzip > "$BACKUP_FILE" if [ $? -eq 0 ]; then BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1) echo -e "${GREEN}✓ 备份成功!${NC}" echo "文件大小: $BACKUP_SIZE" echo "保存位置: $BACKUP_FILE" echo "" # 清理旧备份(保留最近 7 天) echo -e "${YELLOW}🧹 清理旧备份(保留最近 7 天)...${NC}" find "$BACKUP_DIR" -name "starfireapi_backup_*.sql.gz" -mtime +7 -delete # 显示所有备份 echo -e "${BLUE}📋 现有备份列表:${NC}" ls -lh "$BACKUP_DIR"/starfireapi_backup_*.sql.gz 2>/dev/null || echo "无备份文件" else echo -e "${RED}❌ 备份失败${NC}" exit 1 fi echo "" echo -e "${BLUE}==========================================" echo "💡 恢复数据库命令" echo -e "==========================================${NC}" echo "gunzip < $BACKUP_FILE | docker exec -i sub2api-postgres psql -U sub2api sub2api" echo ""