#!/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}"