gongxiangp2/scripts/sync-prod-to-shadow.sh
chenpei 0ce59be34e 备份:组织架构设计方案讨论前的代码快照
- 包含所有当前修改和新功能
- 准备开始组织架构优化实施方案
2025-12-30 13:20:26 +08:00

96 lines
3.0 KiB
Bash
Raw 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.

#!/bin/bash
# 同步正式环境数据库到影子系统
# 用于将正式环境(lobechat)的数据同步到影子系统(lobechat_stage)
SERVER_IP="192.168.58.20"
PROD_DB_NAME="lobechat"
SHADOW_DB_NAME="lobechat_stage"
DB_USER="gongxiangpan"
DB_PASSWORD="gongxiangpan123"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
echo "========================================"
echo "同步正式环境数据库到影子系统"
echo "========================================"
echo ""
echo "数据库信息:"
echo " 服务器:$SERVER_IP"
echo " 正式环境:$PROD_DB_NAME"
echo " 影子系统:$SHADOW_DB_NAME"
echo ""
# 确认操作
read -p "⚠️ 此操作将覆盖影子系统的数据,是否继续?(y/N) " confirm
if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
echo "❌ 操作已取消"
exit 0
fi
echo ""
echo "📦 步骤 1: 备份影子系统数据库..."
BACKUP_FILE="lobechat_stage_backup_${TIMESTAMP}.dump"
ssh root@$SERVER_IP "docker exec gongxiangpan-postgres-1 pg_dump -U $DB_USER -d $SHADOW_DB_NAME -Fc -f /tmp/$BACKUP_FILE"
if [ $? -eq 0 ]; then
echo "✅ 备份成功:/tmp/$BACKUP_FILE"
else
echo "⚠️ 备份失败,但继续执行..."
fi
echo ""
echo "📥 步骤 2: 从正式环境导出数据..."
EXPORT_FILE="lobechat_export_${TIMESTAMP}.dump"
ssh root@$SERVER_IP "docker exec gongxiangpan-postgres-1 pg_dump -U $DB_USER -d $PROD_DB_NAME -Fc -f /tmp/$EXPORT_FILE"
if [ $? -eq 0 ]; then
echo "✅ 导出成功:/tmp/$EXPORT_FILE"
else
echo "❌ 导出失败!"
exit 1
fi
echo ""
echo "📤 步骤 3: 导入数据到影子系统(会清空现有数据)..."
ssh root@$SERVER_IP "docker exec gongxiangpan-postgres-1 pg_restore -U $DB_USER -d $SHADOW_DB_NAME --clean --if-exists /tmp/$EXPORT_FILE"
if [ $? -eq 0 ]; then
echo "✅ 导入成功!"
else
echo "⚠️ 导入可能有问题,请检查输出..."
fi
echo ""
echo "🔍 步骤 4: 验证同步结果..."
ssh root@$SERVER_IP "docker exec gongxiangpan-postgres-1 psql -U $DB_USER -d $SHADOW_DB_NAME -c 'SELECT (SELECT COUNT(*) FROM users) as users_count, (SELECT COUNT(*) FROM materials) as materials_count, (SELECT COUNT(*) FROM material_skus) as skus_count;'"
echo ""
echo "🔧 步骤 5: 确保影子系统有最新字段..."
# 上传并执行添加字段的SQL脚本
scp scripts/add-sku-fields.sql root@$SERVER_IP:/tmp/add-sku-fields.sql
ssh root@$SERVER_IP "cat /tmp/add-sku-fields.sql | docker exec -i gongxiangpan-postgres-1 psql -U $DB_USER -d $SHADOW_DB_NAME"
ssh root@$SERVER_IP "rm -f /tmp/add-sku-fields.sql"
if [ $? -eq 0 ]; then
echo "✅ 字段检查/添加完成"
else
echo "⚠️ 字段添加可能有问题"
fi
echo ""
echo "🧹 步骤 6: 清理临时文件..."
ssh root@$SERVER_IP "rm -f /tmp/$EXPORT_FILE"
echo ""
echo "========================================"
echo "✅ 同步完成!"
echo "========================================"
echo ""
echo "影子系统已更新,可以访问:"
echo " http://192.168.58.20:5320"
echo ""
echo "备份文件位置:"
echo " /tmp/$BACKUP_FILE"
echo ""