У нас есть большое приложение Yii2 / PHP, использующее базу данных MySQL и управляемое GIT. Приложение находится в постоянном развитии, поскольку клиентам требуются новые функции. База данных меняется довольно часто. Версия приложения контролируется с помощью GIT (каждая производственная версия получает новый тег GIT) и выполняется ежедневное резервное копирование.
Когда что-то выходит из строя, нам нужно восстановить одну из наших последних резервных копий базы данных. Иногда в случае проблем с базой данных восстановление не удается из-за недавних обновлений приложения. И наоборот (к счастью, этого еще не было!): Если приложение дает сбой (например, сервер взломан), нам нужно знать, к какому тегу GIT принадлежит база данных.
Как мы можем гарантировать, что база данных и приложение синхронизированы?
Существуют ли сценарии или передовой опыт?
Кстати: мы не хотим включать резервную копию базы данных в управление версиями git (см. здесь )
Это обычно делается путем добавления некоторой логики в приложение. Когда приложение запускается, оно должно проверить совместимость схемы БД (например, поместив тэг в какую-нибудь таблицу БД). Если схема базы данных слишком стара для данного релиза приложения, приложение может автоматически применить необходимые сценарии миграции. Если схема БД слишком старая, приложение должно отказаться от работы
.