Skip to content

# Виправлення періодичної втрати даних

## Проблема

Дані (MicroDAO, агенти) періодично зникають з бази даних, що призводить до помилок на сайті: - "MicroDAO не знайдено" - "Агенти не знайдені" (0 агентів) - "Помилка завантаження агентів"

## Причини

1. PostgreSQL перезапускається і втрачає дані через проблеми з персистентністю
2. Міграції не застосовуються при перезапуску (initdb.d працює тільки при першому створенні)
3. Відновлення з бекапу не працює через активні з'єднання до БД
4. Monitor не виявляє втрату NODE2 агентів (перевіряє тільки загальну кількість)

## Виправлення

### 1. Покращений monitor-db-stability.sh

- ✅ Виправлено обробку порожніх змінних
- ✅ Додано перевірку NODE2 агентів (має бути ≥45 з 50)
- ✅ Збільшено поріг для агентів (≥50 замість ≥10)
- ✅ Додано завершення активних з'єднань перед відновленням БД
- ✅ Покращено логування та верифікацію після відновлення

### 2. Автоматичне відновлення

Monitor працює кожні 5 хвилин через cron і: 1. Перевіряє кількість MicroDAO (має бути ≥5) 2. Перевіряє загальну кількість агентів (має бути ≥50) 3. Перевіряє кількість NODE2 агентів (має бути ≥45) 4. Якщо дані втрачені: - Завершує активні з'єднання - Відновлює БД з бекапу - Застосовує міграції - Синхронізує NODE2 агентів - Видаляє тестових агентів - Виправляє URLs логотипів та банерів

### 3. Налаштування PostgreSQL

В `docker-compose.db.yml` додано параметри для кращої персистентності: - `checkpoint_timeout=15min` - частіші checkpoint'и - `max_wal_size=1GB` - більший розмір WAL - `wal_level=replica` - рівень логування для реплікації

## Перевірка

### Перевірити поточний стан

    docker exec daarion-postgres psql -U postgres -d daarion -c "
    SELECT
      (SELECT COUNT(*) FROM microdaos) as microdaos,
      (SELECT COUNT(*) FROM agents) as agents,
      (SELECT COUNT(*) FROM agents WHERE node_id = 'node-2-macbook-m4max') as node2_agents;
    "

### Перевірити логи monitor

    tail -50 /var/log/db-stability-monitor.log

### Перевірити cron job

    crontab -l | grep monitor
    # Має бути: */5 * * * * /opt/microdao-daarion/scripts/monitor-db-stability.sh >> /var/log/db-stability-monitor.log 2>&1

## Якщо дані все ще втрачаються

1. Перевірити бекапи: `bash ls -lh /opt/microdao-daarion/db_backups/`

2. Перевірити логи PostgreSQL: `bash docker logs daarion-postgres --since 1h | grep -i "error\|fatal\|panic"`

3. Перевірити volume персистентність: `bash docker volume inspect daarion_pgdata`

4. Запустити monitor вручну: `bash cd /opt/microdao-daarion bash scripts/monitor-db-stability.sh`

## Очікуваний результат

- MicroDAO: 9
- Агенти: 59 (9 core + 50 NODE2)
- NODE2 агенти: 50
- Monitor працює кожні 5 хвилин
- Автоматичне відновлення при втраті даних

## Статус

✅ Monitor покращено ✅ Перевірка NODE2 агентів додана ✅ Автоматичне відновлення працює ✅ URLs логотипів/банерів виправляються автоматично

Проблема має бути вирішена. Якщо дані все ще втрачаються, потрібно перевірити: - Чи працює cron job - Чи є актуальні бекапи - Чи є проблеми з volume персистентністю