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

118 lines
3.3 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
# 在服务器上直接执行的同步脚本
# 使用方法:先SSH到服务器,然后执行此脚本
PROD_DB_NAME="lobechat"
SHADOW_DB_NAME="lobechat_stage"
DB_USER="gongxiangpan"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
echo "========================================"
echo "同步正式环境数据库到影子系统"
echo "========================================"
echo ""
echo "数据库信息:"
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: 备份影子系统数据库..."
docker exec gongxiangpan-postgres-1 pg_dump -U $DB_USER -d $SHADOW_DB_NAME -Fc -f /tmp/lobechat_stage_backup_${TIMESTAMP}.dump
if [ $? -eq 0 ]; then
echo "✅ 备份成功:/tmp/lobechat_stage_backup_${TIMESTAMP}.dump"
else
echo "⚠️ 备份失败,但继续执行..."
fi
echo ""
echo "📥 步骤 2: 从正式环境导出数据..."
EXPORT_FILE="lobechat_export_${TIMESTAMP}.dump"
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: 导入数据到影子系统(会清空现有数据)..."
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: 验证同步结果..."
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: 确保影子系统有最新字段..."
cat > /tmp/add-sku-fields.sql << 'EOF'
-- 添加 preview_url 字段
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_name = 'material_skus'
AND column_name = 'preview_url'
) THEN
ALTER TABLE material_skus ADD COLUMN preview_url TEXT;
END IF;
END $$;
-- 添加 file_name 字段
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_name = 'material_skus'
AND column_name = 'file_name'
) THEN
ALTER TABLE material_skus ADD COLUMN file_name TEXT;
END IF;
END $$;
EOF
cat /tmp/add-sku-fields.sql | docker exec -i gongxiangpan-postgres-1 psql -U $DB_USER -d $SHADOW_DB_NAME
rm -f /tmp/add-sku-fields.sql
if [ $? -eq 0 ]; then
echo "✅ 字段检查/添加完成"
else
echo "⚠️ 字段添加可能有问题"
fi
echo ""
echo "🧹 步骤 6: 清理临时文件..."
rm -f /tmp/$EXPORT_FILE
echo ""
echo "========================================"
echo "✅ 同步完成!"
echo "========================================"
echo ""
echo "影子系统已更新,可以访问:"
echo " http://192.168.58.20:5320"
echo ""
echo "备份文件位置:"
echo " /tmp/lobechat_stage_backup_${TIMESTAMP}.dump"
echo ""