新功能: 1. S3存储桶配置管理 - 可在系统设置中配置S3端点、密钥等 2. 全站实时弹幕功能 - 右下角悬浮球,支持实时发送和接收弹幕 3. LOGO分离上传 - 导航栏LOGO和登录页LOGO分开上传 数据库更新: - SystemSettings表新增s3Endpoint, s3AccessKey, s3SecretKey等6个字段 - 新增Danmaku表用于存储弹幕数据 技术改进: - 部门管理从系统设置移至系统管理标签页 - 优化了浏览器标题动态更新 - 添加了弹幕轮询机制(2秒)
187 lines
4.8 KiB
Bash
Executable File
187 lines
4.8 KiB
Bash
Executable File
#!/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 "$@"
|
||
|