为什么在获取DC / OS上的锁定后,MySQL数据库上的Liquibase迁移会死掉(使用docker-compose工作正常)?

时间:2017-04-14 20:28:19

标签: docker liquibase dcos

  • DC / OS 1.9.0
  • MARATHON 1.4.2
  • LIQUIBASE 3.5.3

我实现了一个短暂的docker容器,它针对mysql数据库运行Liquibase迁移。通过docker-compose,容器在开发过程中一直很好用。但是,我试图在DCOS集群中实现此容器以准备生产。

当Liquibase运行时,它成功获得一个锁,然后就死了。以下是运行的输出:

DEBUG 4/14/17 8:06 PM: liquibase: Connected to root@10.0.1.113@jdbc:mysql://test-db.marathon.l4lb.thisdcos.directory/myapp
DEBUG 4/14/17 8:06 PM: liquibase: Setting auto commit to false from true
DEBUG 4/14/17 8:06 PM: liquibase: Executing QUERY database command: select count(*) from myapp.DATABASECHANGELOGLOCK
DEBUG 4/14/17 8:06 PM: liquibase: Executing QUERY database command: select count(*) from myapp.DATABASECHANGELOGLOCK
INFO 4/14/17 8:06 PM: liquibase: Successfully acquired change log lock
/usr/local/bin/liquibase: line 56:   295 Killed                  java -cp "$CP" $JAVA_OPTS liquibase.integration.commandline.Main ${1+"$@"}

DATABASECHANGELOGLOCK表已成功创建,因此我知道它既访问数据库又创建表,但它只是死了。

运行后,锁定表如下所示:

MySQL [myapp]> select * from DATABASECHANGELOGLOCK;
+----+--------+-------------+----------+
| ID | LOCKED | LOCKGRANTED | LOCKEDBY |
+----+--------+-------------+----------+
|  1 |        | NULL        | NULL     |
+----+--------+-------------+----------+

以下是正在运行的命令:

liquibase --changeLogFile=base_change_log.xml --driver=com.mysql.jdbc.Driver --url=jdbc:mysql://test-db.marathon.l4lb.thisdcos.directory/myapp --contexts=production --username=root --password=****** --classpath=/opt/jdbc_drivers/mysql-connector-java-5.1.40-bin.jar --logLevel=debug update

这是liquibase bash文件运行的命令:

java -cp .:/opt/liquibase/liquibase.jar:/opt/liquibase/lib/snakeyaml-1.17.jar liquibase.integration.commandline.Main --changeLogFile=base_change_log.xml --driver=com.mysql.jdbc.Driver --url=jdbc:mysql://test-db.marathon.l4lb.thisdcos.directory/myapp --contexts=production --username=root --password=****** --classpath=/opt/jdbc_drivers/mysql-connector-java-5.1.40-bin.jar --logLevel=debug update

正如我所说,这个容器在本地使用docker-compose工作正常,如果我在其中一个dcos从器件上安装所有deps并在本地运行liquibase,它也可以工作。

有没有更好的方法来调试它?有没有人在DCOS集群中成功运行liquibase迁移?

1 个答案:

答案 0 :(得分:1)

请检查Mesos主日志。我怀疑你遇到了OOM杀死任务。