我们有一个大型 Yii2 / PHP 应用程序,使用 MySQL 数据库,并由 GIT 进行版本控制。由于客户需要新功能,该应用程序正在不断开发中。数据库更改非常频繁。该应用程序使用 GIT 进行版本控制(每个生产版本都会获得一个新的 GIT 标签)并每天备份。
当出现故障时,我们需要恢复最新的数据库备份之一。有时,如果数据库出现问题,恢复会因为最近的应用程序更新而失败。反之亦然(幸运的是,这种情况还没有发生!):如果应用程序出现故障(例如服务器被黑客入侵),我们需要知道数据库属于哪个 GIT 标签。
我们如何确保数据库和应用程序同步?
有没有脚本或者最佳实践?
顺便说一句:我们不想将数据库备份包含在 git 版本控制中(请参阅这里)
答案1
这通常是通过向应用程序添加一些逻辑来实现的。当应用程序启动时,它应该检查数据库架构是否兼容(例如,通过将标签放入某个数据库表中)。如果数据库架构对于该版本的应用程序来说太旧,应用程序可以自动应用所需的迁移脚本。如果数据库架构太新,应用程序应该拒绝工作。