dy-dashboard/backup.sh
2026-10-28 11:14:17 +08:00

78 lines
2.5 KiB
Bash
Executable File
Raw Permalink 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.

#!/usr/bin/env bash
# ============================================================
# 蝶雅采购智能体平台 - 每日自动备份脚本
# 打包内容:完整项目源码 + 数据库
# 运行方式:每天早上 8:30 由 cron 自动执行
# ============================================================
set -euo pipefail
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
BACKUP_DIR="${PROJECT_DIR}/backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M")
DB_USER="dy_app"
DB_PASS="dy_data_2026"
DB_NAME="dy_data"
# 确保备份目录存在
mkdir -p "$BACKUP_DIR"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始备份蝶雅采购智能体平台..."
# 1. 导出数据库到项目根目录(解压时直接可见)
DB_DUMP="${PROJECT_DIR}/dy_data_${TIMESTAMP}.sql"
echo " 导出数据库 → dy_data_${TIMESTAMP}.sql"
mysqldump \
-h 127.0.0.1 \
-u "${DB_USER}" \
-p"${DB_PASS}" \
--single-transaction \
--no-tablespaces \
--routines \
--triggers \
--default-character-set=utf8mb4 \
"${DB_NAME}" > "${DB_DUMP}"
DB_SIZE=$(du -h "${DB_DUMP}" | cut -f1)
echo " 数据库导出完成 (${DB_SIZE})"
# 2. 打包整个项目(含数据库导出文件)
BACKUP_FILE="${BACKUP_DIR}/dy_platform_backup_${TIMESTAMP}.tar.gz"
echo " 打包项目 → dy_platform_backup_${TIMESTAMP}.tar.gz"
# 排除不需要打包的目录和文件
tar czf "${BACKUP_FILE}" \
-C "$(dirname "${PROJECT_DIR}")" \
--exclude="dy-dashboard/backups/*.tar.gz" \
--exclude="dy-dashboard/venv" \
--exclude="dy-dashboard/node_modules" \
--exclude="dy-dashboard/__pycache__" \
--exclude="dy-dashboard/*/__pycache__" \
--exclude="dy-dashboard/.git" \
--exclude="dy-dashboard/tmp_csv" \
--exclude="dy-dashboard/logs/*.log" \
--exclude="dy-dashboard/dy_data_v*.sql" \
dy-dashboard
# 2.5 独立备份新品图片(部署源图片目录单独保留,便于恢复核对)
NEW_IMAGES_BACKUP="${BACKUP_DIR}/new_products_images_${TIMESTAMP}.tar.gz"
if [ -d "${PROJECT_DIR}/static/uploads/new_products" ]; then
echo " 独立备份新品图片 → ${NEW_IMAGES_BACKUP}"
tar czf "${NEW_IMAGES_BACKUP}" -C "${PROJECT_DIR}/static/uploads" new_products
fi
# 3. 删除临时 SQL 文件(已打包进 tar.gz)
rm -f "${DB_DUMP}"
BACKUP_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 备份完成!"
echo " 文件:${BACKUP_FILE}"
echo " 大小:${BACKUP_SIZE}"
# 4. 清理 30 天前的旧备份
echo " 清理 30 天前的旧备份..."
find "${BACKUP_DIR}" -name "dy_platform_backup_*.tar.gz" -mtime +30 -delete 2>/dev/null || true
echo " 完成"
exit 0