并发数据库创建

时间:2016-09-17 20:32:01

标签: mysql database oracle docker

我的网络应用程序需要在安装期间执行一些初始数据库脚本。这些只是需要运行的一些CREATE TABLE脚本。我正在进行码头化。

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

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

处理这种情况的方法应该是什么?

1 个答案:

答案 0 :(得分:1)

通常,数据库迁移作业应该对每个新脚本进行版本化,只有在完成所有早期脚本之后才会执行。以此为前提,可以设计一个工具,如果尚未运行,则一个接一个地运行这些工作,或者让工作总是运行,但设计它们的方式是检查它们是否已经存在之前做过。

否则,所有应用程序数据都有可能在下次部署时被删除。您应该能够随时部署并重新使用现有数据(使用docker或不使用)。

在你的"简单"如果DB检查以下类型将有所帮助:

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

感谢@Drew提示我将我的评论写入答案。