gongxiangp2/backup-database.sh
chenpei 3fff87cd18 feat: 添加S3存储桶配置、全站实时弹幕功能、LOGO分离上传
新功能:
1. S3存储桶配置管理 - 可在系统设置中配置S3端点、密钥等
2. 全站实时弹幕功能 - 右下角悬浮球,支持实时发送和接收弹幕
3. LOGO分离上传 - 导航栏LOGO和登录页LOGO分开上传

数据库更新:
- SystemSettings表新增s3Endpoint, s3AccessKey, s3SecretKey等6个字段
- 新增Danmaku表用于存储弹幕数据

技术改进:
- 部门管理从系统设置移至系统管理标签页
- 优化了浏览器标题动态更新
- 添加了弹幕轮询机制(2秒)
2025-10-27 17:06:54 +08:00

187 lines
4.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
################################################################################
# 由壹点3D素材共享平台 - 数据库自动备份脚本
# 功能:自动备份PostgreSQL数据库(不包含源素材文件)
# 使用:./backup-database.sh
################################################################################
# 配置
BACKUP_DIR="/mnt/PoolOne/backups/youyidian-3d"
DB_HOST="192.168.58.20"
DB_PORT="5432"
DB_NAME="lobechat"
DB_USER="gongxiangpan"
DB_PASS="gongxiangpan123"
KEEP_DAYS=30 # 保留最近30天的备份
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
# 创建备份目录
create_backup_dirs() {
log_info "创建备份目录..."
mkdir -p "$BACKUP_DIR/database"
mkdir -p "$BACKUP_DIR/logs"
}
# 备份数据库
backup_database() {
local timestamp=$(date +%Y%m%d_%H%M%S)
local backup_file="$BACKUP_DIR/database/db_backup_${timestamp}.sql.gz"
log_info "开始备份数据库..."
# 使用Docker运行pg_dump
docker run --rm \
-e PGPASSWORD="$DB_PASS" \
postgres:15-alpine \
pg_dump \
-h "$DB_HOST" \
-p "$DB_PORT" \
-U "$DB_USER" \
-d "$DB_NAME" \
--no-owner \
--no-acl \
2>/dev/null | gzip > "$backup_file"
if [ $? -eq 0 ] && [ -f "$backup_file" ]; then
local size=$(du -h "$backup_file" | cut -f1)
log_info "数据库备份成功: $backup_file (大小: $size)"
return 0
else
log_error "数据库备份失败"
rm -f "$backup_file"
return 1
fi
}
# 清理旧备份
cleanup_old_backups() {
log_info "清理超过 ${KEEP_DAYS} 天的旧备份..."
# 清理数据库备份
local db_deleted=$(find "$BACKUP_DIR/database" -name "db_backup_*.sql.gz" -mtime +$KEEP_DAYS -delete -print | wc -l)
if [ $db_deleted -gt 0 ]; then
log_info "删除了 $db_deleted 个旧数据库备份"
fi
# 清理旧日志
find "$BACKUP_DIR/logs" -name "backup_*.log" -mtime +$KEEP_DAYS -delete
}
# 生成备份报告
generate_report() {
local report_file="$BACKUP_DIR/logs/backup_$(date +%Y%m%d_%H%M%S).log"
cat > "$report_file" << EOF
================================================================================
数据库备份报告
================================================================================
备份时间: $(date '+%Y-%m-%d %H:%M:%S')
数据库: $DB_NAME@$DB_HOST:$DB_PORT
--- 备份统计 ---
数据库备份数量: $(ls -1 "$BACKUP_DIR/database" 2>/dev/null | wc -l)
最旧备份: $(ls -t "$BACKUP_DIR/database" 2>/dev/null | tail -n 1 | xargs stat -c %y 2>/dev/null | cut -d' ' -f1)
最新备份: $(ls -t "$BACKUP_DIR/database" 2>/dev/null | head -n 1 | xargs stat -c %y 2>/dev/null | cut -d' ' -f1)
--- 磁盘使用 ---
数据库备份占用: $(du -sh "$BACKUP_DIR/database" 2>/dev/null | cut -f1)
总计占用: $(du -sh "$BACKUP_DIR" 2>/dev/null | cut -f1)
--- 最新5个备份 ---
$(ls -lht "$BACKUP_DIR/database" 2>/dev/null | head -n 6 | tail -n 5)
================================================================================
EOF
log_info "备份报告已生成: $report_file"
}
# 测试数据库连接
test_connection() {
log_info "测试数据库连接..."
docker run --rm \
-e PGPASSWORD="$DB_PASS" \
postgres:15-alpine \
psql \
-h "$DB_HOST" \
-p "$DB_PORT" \
-U "$DB_USER" \
-d "$DB_NAME" \
-c "SELECT 1;" >/dev/null 2>&1
if [ $? -eq 0 ]; then
log_info "数据库连接成功"
return 0
else
log_error "数据库连接失败"
return 1
fi
}
# 主函数
main() {
echo ""
echo "========================================"
echo " 由壹点3D素材 - 数据库备份"
echo "========================================"
echo ""
# 测试连接
if ! test_connection; then
log_error "备份终止:无法连接到数据库"
exit 1
fi
# 创建目录
create_backup_dirs
# 执行备份
local db_status=0
backup_database || db_status=1
# 清理旧备份
cleanup_old_backups
# 生成报告
generate_report
# 汇总结果
echo ""
echo "========================================"
echo " 备份完成"
echo "========================================"
if [ $db_status -eq 0 ]; then
log_info "数据库备份任务成功完成"
exit 0
else
log_error "数据库备份任务失败"
exit 1
fi
}
# 执行主函数
main "$@"