为什么 Liquibase 在 MySQL 数据库上的迁移在获得对 DC/OS 的锁定后终止(与 docker-compose 配合良好)?

Why does Liquibase migration on MySQL database die after acquiring lock on DC/OS (worked fine with docker-compose)?

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

当 Liquibase 运行s 时,它成功获取了一个锁,然后就挂掉了。这是 运行:

的输出
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 table 已成功创建,所以我知道它正在访问数据库并创建 table,但它只是死掉了。

在 运行 之后,锁 table 看起来像:

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 文件 运行s:

的命令
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 slaves 和 运行 liquibase 本地安装所有 deps,它也可以工作。

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

请检查 Mesos master 日志。我怀疑您遇到了任务的 OOM 终止。