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

112 lines
3.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
# 蝶雅智能体平台 — 生产环境数据同步脚本
# 用法:bash sync_prod_data.sh
set -euo pipefail
# ========== 配置区 ==========
REMOTE_IP="192.168.11.79"
REMOTE_USER="dieya"
REMOTE_DIR="/home/dieya/.openclaw/workspace/dy-dashboard"
DB_USER="dy_app"
DB_PASS="dy_data_2026"
DB_NAME="dy_data"
# ===========================
DUMPSQL="/tmp/dy_prod_data_$(date +%Y%m%d_%H%M%S).sql"
TABLES="domestic_orders overseas_orders packaging_orders finished_products"
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
info() { echo -e "${CYAN}[INFO]${NC} $*"; }
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
echo ""
echo -e "${GREEN}==========================================${NC}"
echo -e "${GREEN} 蝶雅智能体平台 → 生产环境数据同步${NC}"
echo -e "${GREEN}==========================================${NC}"
echo ""
# 1. SSH 连接测试
info "[1/5] 测试 SSH 连接..."
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=accept-new \
"${REMOTE_USER}@${REMOTE_IP}" "echo SSH_OK" 2>/dev/null | grep -q "SSH_OK" || {
warn "SSH 连接失败,请先执行:ssh ${REMOTE_USER}@${REMOTE_IP}"
exit 1
}
ok "SSH 连接成功"
echo ""
# 2. 导出本地数据
info "[2/5] 导出本机 MySQL 数据..."
> "${DUMPSQL}"
for tbl in ${TABLES}; do
cnt=$(mysql -u${DB_USER} -p${DB_PASS} -h 127.0.0.1 ${DB_NAME} -N -s -e \
"SELECT COUNT(*) FROM \`${tbl}\`" 2>/dev/null)
info " 导出 ${tbl} (${cnt}条)..."
mysqldump -u${DB_USER} -p${DB_PASS} -h 127.0.0.1 \
--no-create-info --complete-insert --skip-add-locks \
${DB_NAME} ${tbl} >> "${DUMPSQL}" 2>/dev/null
done
ok "本地数据导出完成 → $(du -h "${DUMPSQL}" | cut -f1)"
echo ""
# 3. 传输到生产
info "[3/5] 传输 SQL 到生产服务器..."
scp "${DUMPSQL}" "${REMOTE_USER}@${REMOTE_IP}:/tmp/dy_import.sql" >/dev/null 2>&1
ok "传输完成"
echo ""
# 4. 导入生产库
info "[4/5] 导入数据到生产 MySQL..."
ssh "${REMOTE_USER}@${REMOTE_IP}" << EOF
set -e
echo " [生产] 清空旧数据..."
mysql -u${DB_USER} -p${DB_PASS} ${DB_NAME} -e "
DELETE FROM domestic_orders;
DELETE FROM overseas_orders;
DELETE FROM packaging_orders;
DELETE FROM finished_products;
" 2>/dev/null
echo " [生产] 导入新数据..."
mysql -u${DB_USER} -p${DB_PASS} ${DB_NAME} < /tmp/dy_import.sql 2>/dev/null
echo " [生产] 验证导入结果..."
mysql -u${DB_USER} -p${DB_PASS} ${DB_NAME} -e "
SELECT 'domestic_orders' AS table_name, COUNT(*) AS cnt FROM domestic_orders
UNION ALL
SELECT 'overseas_orders', COUNT(*) FROM overseas_orders
UNION ALL
SELECT 'packaging_orders', COUNT(*) FROM packaging_orders
UNION ALL
SELECT 'finished_products', COUNT(*) FROM finished_products;
" 2>/dev/null
rm -f /tmp/dy_import.sql
EOF
ok "生产数据导入完成"
echo ""
# 5. 重启服务
PID=$(ssh "${REMOTE_USER}@${REMOTE_IP}" "lsof -t -i:18888" 2>/dev/null || true)
if [ -n "$PID" ]; then
info "[5/5] 重启生产环境 Gunicorn..."
ssh "${REMOTE_USER}@${REMOTE_IP}" "kill -HUP ${PID}" 2>/dev/null
sleep 1
ok "生产环境服务已重启"
else
info "[5/5] 生产环境服务未运行,跳过重启"
fi
echo ""
echo -e "${GREEN}==========================================${NC}"
echo -e "${GREEN} 数据同步完成!${NC}"
echo -e "${GREEN}==========================================${NC}"
echo ""
echo " 生产环境:http://${REMOTE_IP}:18888"
echo ""
# 清理本地临时文件
rm -f "${DUMPSQL}"