31 lines
1.3 KiB
Bash
31 lines
1.3 KiB
Bash
#!/bin/bash
|
|
# /opt/topfans/loadtest/recover/restore-from-backup.sh
|
|
# 用法: bash restore-from-backup.sh /opt/topfans/backups/pre-loadtest-XXXX.sql
|
|
set -e
|
|
|
|
BACKUP_FILE=$1
|
|
[ -f "$BACKUP_FILE" ] || { echo "❌ 备份文件不存在: $BACKUP_FILE"; exit 1; }
|
|
|
|
PG_CONTAINER=$(docker ps --filter 'name=postgres' --format '{{.Names}}' | grep -v exporter | head -1)
|
|
[ -z "$PG_CONTAINER" ] && { echo "❌ 找不到 postgres 容器"; exit 1; }
|
|
export PGPASSWORD="${DB_PASSWORD:-postgres123}"
|
|
|
|
echo "🛑 停应用层..."
|
|
docker ps --filter 'name=topfans-' --format '{{.Names}}' \
|
|
| grep -v postgres | grep -v redis | grep -v exporter \
|
|
| xargs -r docker stop
|
|
|
|
echo "🗑️ 删库重建..."
|
|
docker exec -e PGPASSWORD="$PGPASSWORD" "$PG_CONTAINER" psql -U postgres -c "DROP DATABASE topfans;"
|
|
docker exec -e PGPASSWORD="$PGPASSWORD" "$PG_CONTAINER" psql -U postgres -c "CREATE DATABASE topfans;"
|
|
|
|
echo "📥 还原 $BACKUP_FILE ..."
|
|
docker exec -i -e PGPASSWORD="$PGPASSWORD" "$PG_CONTAINER" psql -U postgres -d topfans < "$BACKUP_FILE"
|
|
|
|
echo "🚀 启动应用层..."
|
|
cd /opt/topfans/docker || { echo "❌ 找不到 /opt/topfans/docker"; exit 1; }
|
|
docker-compose -f docker-compose.prod.yml --profile prod up -d
|
|
|
|
sleep 30
|
|
curl -fs http://localhost:8080/health && echo "✅ 恢复完成"
|