Files
microdao-daarion/docs/DB_DATA_LOSS_FIX.md

4.5 KiB
Raw Blame History

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

Проблема

Дані (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. Перевірити бекапи:

    ls -lh /opt/microdao-daarion/db_backups/
    
  2. Перевірити логи PostgreSQL:

    docker logs daarion-postgres --since 1h | grep -i "error\|fatal\|panic"
    
  3. Перевірити volume персистентність:

    docker volume inspect daarion_pgdata
    
  4. Запустити monitor вручну:

    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 персистентністю