#!/bin/bash # サーバーのDBをローカルに同期するスクリプト # # 事前準備(サーバー側でkeinasystemユーザーとして実行): # docker exec keinasystem_db pg_dump -U keinasystem keinasystem > /tmp/keinasystem_dump.sql # # 使用: bash sync_db.sh set -e REMOTE_HOST="keinafarm" LOCAL_DUMP="/tmp/keinasystem_dump.sql" echo "=== DBSync: サーバー → ローカル ===" # 1. サーバーからdumpファイルをscpで取得 echo "[1/4] サーバーからダンプファイルを取得..." scp "$REMOTE_HOST:/tmp/keinasystem_dump.sql" "$LOCAL_DUMP" echo " → ダンプ取得完了: $LOCAL_DUMP ($(du -sh $LOCAL_DUMP | cut -f1))" # 2. ローカルのDBコンテナが起動しているか確認 echo "[2/4] ローカルDBコンテナを確認..." if ! docker compose -f docker-compose.local.yml ps db 2>/dev/null | grep -q "running"; then echo " → ローカルDBコンテナが起動していません。起動します..." docker compose -f docker-compose.local.yml up -d db echo " → DB起動待機中..." sleep 10 fi # 3. 既存データをドロップして復元 echo "[3/4] ローカルDBにリストア(既存データをリセット)..." # DBを一旦削除して再作成してからリストア docker compose -f docker-compose.local.yml exec -T db \ psql -U keinasystem -d postgres -c "DROP DATABASE IF EXISTS keinasystem;" --quiet docker compose -f docker-compose.local.yml exec -T db \ psql -U keinasystem -d postgres -c "CREATE DATABASE keinasystem OWNER keinasystem;" --quiet cat "$LOCAL_DUMP" | docker compose -f docker-compose.local.yml exec -T db \ psql -U keinasystem -d keinasystem --quiet echo " → リストア完了" # クリーンアップ rm -f "$LOCAL_DUMP" # 4. マイグレーション(サーバーより新しいマイグレーションを適用) echo "[4/4] マイグレーション実行..." docker compose -f docker-compose.local.yml exec backend python manage.py migrate echo "" echo "=== 同期完了 ==="