Skip to content

Миграции и резервные копии базы данных

На этой странице описано, как dinary-server управляет DuckDB-файлами и как безопасно делать их резервные копии.

Файлы базы данных

Сервер хранит данные в директории data/:

  • config.duckdb - справочные данные: категории, группы, теги, магазины и mapping-таблицы
  • budget_YYYY.duckdb - транзакционные данные за год: расходы и задания синхронизации

Миграции

Изменения схемы управляются через миграции yoyo.

Когда миграции запускаются автоматически

  • При старте приложения config.duckdb автоматически мигрируется до последней версии
  • При первом открытии годовой базы budget_YYYY.duckdb она автоматически создается и мигрируется
  • Во время inv deploy deploy-скрипт применяет миграции config.duckdb до перезапуска сервиса

Для новой установки ручной шаг миграции обычно не нужен.

Ручные команды миграции

Если вы хотите применить миграции явно на сервере:

inv migrate-config
inv migrate-budget --year=2026

Используйте migrate-budget для любого года, чей файл budget_YYYY.duckdb уже существует или должен быть создан заранее.

Стратегия резервного копирования

DuckDB хранит данные в локальных файлах, поэтому резервное копирование здесь файловое.

Что нужно сохранять

Сохраняйте всю директорию data/, включая:

  • config.duckdb
  • все файлы budget_YYYY.duckdb
  • data/.deployed_version, если хотите сохранить метаданные деплоя

Когда рекомендуется делать backup

Создавайте резервную копию:

  • перед inv deploy
  • перед ручным запуском миграций в production
  • перед любыми ручными изменениями файлов в data/

Команда backup

Чтобы скачать данные сервера локально:

inv backup

По умолчанию команда копирует удаленную директорию data/ в ./backups/.

Можно указать другой путь:

inv backup --dest=./my-backups

Восстановление

Чтобы восстановиться из backup:

  1. Остановите работающий сервис
  2. Замените содержимое data/ файлами из резервной копии
  3. Запустите сервис снова
  4. Выполните inv migrate-config и inv migrate-budget --year=YYYY, если хотите принудительно проверить миграции после восстановления

Так как база файловая, восстановление обычно сводится к копированию файлов.

Практические рекомендации

  • Держите как минимум одну резервную копию перед каждым деплоем
  • Считайте data/ источником истины
  • Не редактируйте DuckDB-файлы, пока сервис активно в них пишет
  • Если копируете файлы вручную, предпочтительно делать это при остановленном сервисе