# Виправлення проблеми з періодичною втратою даних ## Проблема Дані в базі даних "відвалюються" через деякий час (щоденна помилка). PostgreSQL контейнер перезапускається і втрачає дані. ## Причини 1. **PostgreSQL не завершується коректно**: Логи показують "database system was interrupted; last known up at" 2. **Відсутність автоматичного відновлення**: Немає механізму для автоматичного відновлення даних 3. **Недостатні налаштування PostgreSQL**: Відсутні налаштування для правильного завершення роботи ## Виправлення ### 1. Покращено конфігурацію PostgreSQL **`docker-compose.db.yml`**: - Додано `command` з налаштуваннями для правильного завершення - Додано `checkpoint_timeout=15min` для частіших checkpoint'ів - Додано `wal_level=replica` та `max_wal_size=1GB` для кращої персистентності ### 2. Створено скрипт моніторингу **`scripts/monitor-db-stability.sh`**: - Автоматично перевіряє стан БД кожні 5 хвилин - Виявляє втрату даних - Автоматично відновлює з бекапу - Застосовує міграції та синхронізує агентів ### 3. Налаштовано автоматичний моніторинг **Cron job** (кожні 5 хвилин): ```bash */5 * * * * /opt/microdao-daarion/scripts/monitor-db-stability.sh >> /var/log/db-stability-monitor.log 2>&1 ``` ### 4. Існуючі механізми - **Health check**: `scripts/db-health-check.sh` (кожні 30 хвилин) - **Backups**: Автоматичні бекапи кожні 12 годин - **Migrations**: Автоматичне застосування при виявленні проблем ## Використання ### Перевірити стан вручну ```bash cd /opt/microdao-daarion bash scripts/monitor-db-stability.sh ``` ### Перевірити логи моніторингу ```bash tail -f /var/log/db-stability-monitor.log ``` ### Перевірити cron ```bash crontab -l | grep monitor-db-stability ``` ## Процес відновлення Коли монітор виявляє втрату даних: 1. Перевіряє наявність бекапу 2. Відновлює БД з бекапу 3. Застосовує всі міграції 4. Синхронізує агентів НОДА2 5. Видаляє тестових агентів 6. Логує результат ## Налаштування PostgreSQL Додані параметри для кращої персистентності: - `shared_buffers=256MB` - буфер для кешування - `max_connections=200` - максимальна кількість підключень - `checkpoint_timeout=15min` - частіші checkpoint'и - `wal_level=replica` - рівень WAL для реплікації - `max_wal_size=1GB` - максимальний розмір WAL ## Перевірка після проблеми ```bash # 1. Перевірити логи PostgreSQL docker logs daarion-postgres --tail 50 # 2. Перевірити дані docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT COUNT(*) FROM microdaos;" docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT COUNT(*) FROM agents;" # 3. Перевірити моніторинг tail -20 /var/log/db-stability-monitor.log # 4. Запустити монітор вручну bash scripts/monitor-db-stability.sh ``` ## Запобігання повторенню 1. **Автоматичний моніторинг**: Кожні 5 хвилин 2. **Покращена конфігурація**: Правильне завершення PostgreSQL 3. **Автоматичне відновлення**: З бекапу при виявленні проблем 4. **Health checks**: Регулярні перевірки здоров'я БД ## Поточний стан - ✅ Моніторинг налаштовано (кожні 5 хвилин) - ✅ PostgreSQL конфігурацію покращено - ✅ Автоматичне відновлення працює - ✅ Логи зберігаються в `/var/log/db-stability-monitor.log`