96 lines
3.0 KiB
Bash
96 lines
3.0 KiB
Bash
#!/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 ""
|
||
|