并发数据库创build

我的Web应用程序需要一些初始数据库脚本在安装过程中执行。 这些只是一些需要运行的CREATE TABLE脚本。 我正在研究它。

我一直在尝试使用Docker 1.12的swarm模式来创build多个使用共享数据库的Web应用程序的容器副本。 (一个Oracle 12c或MySQL实例)。

问题是,当我启动容器的多个副本时,他们都试图同时运行SQL脚本并失败。 我试过使用Flyway处理数据库迁移,但无济于事。

应该怎样处理这种情况呢?

一般来说,数据库迁移作业应该在每个新的脚本执行完毕后才能执行版本控制。 以此为前提条件,可以devise一个工具,一个接一个地运行这些工作,或者一个让工作始终运行,但是devise它们是为了检查以前没有做过的工作。

否则,所有应用程序数据都有可能在下次部署时被清除。 您应该能够部署任何时间保留和重用现有数据(使用docker或不使用)。

在您的“简单”情况下,以下types的数据库检查将有助于:

 create table IF NOT EXISTS thing (col1 int not null, col2 int not null, age int not null ); 

感谢@Drew提示我把我的评论放入一个答案。