我的网络应用程序需要在安装过程中执行一些初始数据库脚本。这些只是一些需要运行的 CREATE TABLE 脚本。我正在努力将其 Docker 化。
我一直在尝试使用 Docker 1.12 的群模式来创建使用共享数据库的 Web 应用程序的多个容器副本。 (Oracle 12c 或 MySQL 实例)。
问题是,当我启动容器的多个副本时,它们都尝试同时运行 SQL 脚本并失败。我尝试使用 Flyway 来处理数据库迁移,但没有成功。
遇到这种情况应该怎样处理?
最佳答案
通常,数据库迁移作业应该在所有早期脚本完成后才执行每个新脚本的版本控制。以此为先决条件,人们可以设计一种工具,如果尚未运行,则可以逐个运行这些作业,或者让作业始终运行,但以一种检查它们是否未被运行的方式设计它们。之前做过。
否则,所有应用程序数据在下次部署时都有被删除的风险。您应该能够随时部署并重用现有数据(无论是否使用 docker)。
在您的“简单”情况下,以下类型的数据库检查会有所帮助:
create table IF NOT EXISTS thing (col1 int not null, col2 int not null, age int not null );
感谢@Drew 提示我将评论放入答案中。
关于mysql - 并发数据库创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39551443/