为什么 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)?
- DC/OS 1.9.0
- 马拉松 1.4.2
- LIQUIBASE 3.5.3
我实现了一个短暂的 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 终止。
- DC/OS 1.9.0
- 马拉松 1.4.2
- LIQUIBASE 3.5.3
我实现了一个短暂的 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 终止。