# Виправлення періодичної втрати даних ## Проблема Дані (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` - рівень логування для реплікації ## Перевірка ### Перевірити поточний стан ```bash 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 ```bash tail -50 /var/log/db-stability-monitor.log ``` ### Перевірити cron job ```bash 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 персистентністю