78 lines
2.5 KiB
Bash
Executable File
78 lines
2.5 KiB
Bash
Executable File
#!/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
|