Skip to content

# DB_RESTORE — Як відновити базу daarion

## 1. Відновлення з останнього бекапу

### Крок 1: Зупинити сервіси

    docker compose -f docker-compose.db.yml stop db
    docker compose -f docker-compose.web.yml stop city-service web

### Крок 2: Відновити базу з бекапу

    # Знайти останній бекап
    ls -lt db_backups/ | head -5

    # Відновити базу
    docker compose -f docker-compose.db.yml exec db psql -U postgres -d postgres -c "DROP DATABASE IF EXISTS daarion;"
    docker compose -f docker-compose.db.yml exec db psql -U postgres -d postgres -c "CREATE DATABASE daarion;"
    docker compose -f docker-compose.db.yml exec -T db psql -U postgres -d daarion < db_backups/daarion_YYYY-MM-DD_HH-MM.sql

Або через docker exec:

    # Скопіювати бекап в контейнер
    docker cp db_backups/daarion_2025-12-02_09-00.sql daarion-postgres:/tmp/backup.sql

    # Відновити
    docker exec daarion-postgres psql -U postgres -d postgres -c "DROP DATABASE IF EXISTS daarion;"
    docker exec daarion-postgres psql -U postgres -d postgres -c "CREATE DATABASE daarion;"
    docker exec -i daarion-postgres psql -U postgres -d daarion < /tmp/backup.sql

### Крок 3: Перезапустити сервіси

    docker compose -f docker-compose.db.yml up -d db
    docker compose -f docker-compose.web.yml up -d city-service web

### Крок 4: Перевірити

    # Перевірити що база працює
    docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT COUNT(*) FROM microdao;"

    # Перевірити API
    curl https://daarion.space/api/city/microdao?limit=1

## 2. Якщо бекапу немає (аварійне відновлення)

### Крок 1: Застосувати міграції

    cd /opt/microdao-daarion
    for f in migrations/*.sql; do
      echo "Applying: $f"
      docker exec -i daarion-postgres psql -U postgres -d daarion < "$f"
    done

### Крок 2: Запустити seed-скрипт

    python3 scripts/seed_full_city_reset.py

### Крок 3: Відновити DAGI-агентів NODE2

    python3 scripts/sync-node2-dagi-agents.py

### Крок 4: Перевірити

    # Перевірити MicroDAOs
    docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT slug, name FROM microdao;"

    # Перевірити агентів
    docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT COUNT(*) FROM agents;"

## 3. Перевірка бекапів

### Список доступних бекапів

    ls -lh db_backups/

### Структура бекапів

- `daarion_YYYY-MM-DD_HH-MM.sql` - щоденні бекапи (зберігаються 7 днів)
- `daarion_YYYY-MM-DD_HH-MM.sql` - тижневі бекапи (зберігаються 4 тижні)
- `daarion_YYYY-MM-DD_HH-MM.sql` - місячні бекапи (зберігаються 6 місяців)

### Створити бекап вручну

    docker exec daarion-postgres pg_dump -U postgres daarion > db_backups/manual_$(date +%F_%H-%M).sql

## 4. Troubleshooting

### Проблема: "database does not exist"

    # Створити базу
    docker exec daarion-postgres psql -U postgres -d postgres -c "CREATE DATABASE daarion;"

### Проблема: "connection refused"

    # Перевірити статус контейнера
    docker ps | grep postgres

    # Перезапустити
    docker compose -f docker-compose.db.yml restart db

### Проблема: "permission denied" при відновленні

    # Перевірити права на файл бекапу
    chmod 644 db_backups/daarion_*.sql