3.4 KiB
3.4 KiB
Підсумок виправлення періодичної втрати даних PostgreSQL
✅ Виконано
1. Виявлено причини проблеми
- Міграції не застосовуються автоматично при перезапуску (тільки при першому створенні БД)
- Конфлікт між старим
dagi-postgresта новимdaarion-postgresконтейнерами - Відсутність автоматичної перевірки цілісності БД
2. Створено скрипти для автоматизації
scripts/apply-migrations.sh: Застосовує всі міграції автоматичноscripts/ensure-db-persistence.sh: Перевіряє цілісність БД та додає відсутні колонкиscripts/db-health-check.sh: Періодична перевірка здоров'я БД (кожні 30 хвилин через cron)
3. Видалено конфліктуючі контейнери
- Видалено старий
dagi-postgresконтейнер
4. Налаштовано автоматичний моніторинг
- Додано cron job для автоматичної перевірки кожні 30 хвилин
- Логи зберігаються в
/var/log/db-health-check.log
5. Оновлено конфігурацію
- Додано монтування скриптів в
docker-compose.db.yml - Створено документацію
docs/DB_PERSISTENCE_FIX.md
📊 Поточний стан
- MicroDAOs: 9 (всі з логотипами, 1 з банером)
- Volume size: 74M
- Health check: Працює автоматично кожні 30 хвилин
- Backups: Автоматичні кожні 12 годин
🔍 Як перевірити
Перевірити стан БД
cd /opt/microdao-daarion
bash scripts/db-health-check.sh
Перевірити дані
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 slug, logo_url IS NOT NULL as has_logo, banner_url IS NOT NULL as has_banner FROM microdaos;"
Перевірити логи health check
tail -f /var/log/db-health-check.log
Перевірити cron
crontab -l | grep db-health-check
🚨 Що робити при втраті даних
- Перевірити бекапи:
ls -lh /opt/microdao-daarion/db_backups/ - Відновити з бекапу (див.
docs/DB_PERSISTENCE_FIX.md) - Застосувати міграції:
bash scripts/apply-migrations.sh - Перевірити цілісність:
bash scripts/db-health-check.sh
📝 Наступні кроки (рекомендації)
- Розглянути використання PostgreSQL replication для високої доступності
- Додати алерти при виявленні проблем (наприклад, через email або Telegram)
- Налаштувати моніторинг розміру volume та попереджати при нестачі місця
- Розглянути використання managed PostgreSQL (наприклад, AWS RDS) для production