112 lines
3.5 KiB
Bash
Executable File
112 lines
3.5 KiB
Bash
Executable File
#!/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}"
|