Mysql liquibase无法更新数据库和/或速度非常慢
当我们使用Liquibase执行以下变更集时,我们面临一个非常奇怪的问题:Mysql liquibase无法更新数据库和/或速度非常慢,mysql,sql,jdbc,liquibase,ddl,Mysql,Sql,Jdbc,Liquibase,Ddl,当我们使用Liquibase执行以下变更集时,我们面临一个非常奇怪的问题: <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.l
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.3.xsd">
<changeSet id="add companyinfo.identifier" author="domi">
<addColumn tableName="companyinfo">
<column name="identifier" type="VARCHAR(50)" />
</addColumn>
</changeSet>
<changeSet id="add uk companyinfo.identifier" author="domi">
<addUniqueConstraint columnNames="identifier"
tableName="companyinfo"
constraintName="uk_companyinfo_identifier"/>
</changeSet>
</databaseChangeLog>
当我在笔记本电脑上运行与Liquibase相同的命令时,不是通过JDBC,而是从Sequepro MySql客户端中运行,该客户端连接到上述相同的数据库(瑞士的客户端,美国东海岸的数据库),它在大约15分钟内成功完成,没有任何问题
以下是Liquibase执行的语句:
-- *********************************************************************
-- Update Database Script
-- *********************************************************************
-- Change Log: src/main/resources/db/db.changelog-master.xml
-- Ran at: 5/3/17 7:55 AM
-- Against: XXXX@CCCCC@jdbc:mysql://yyyy.xxxx.net:3306/my_db?characterEncoding=utf8
-- Liquibase version: 3.5.3
-- *********************************************************************
-- Lock Database
UPDATE DATABASECHANGELOGLOCK SET LOCKED = 1, LOCKEDBY = 'xxxxx (192.168.1.24)', LOCKGRANTED = '2017-05-03 07:55:44.564' WHERE ID = 1 AND LOCKED = 0;
-- Changeset db/changelog/db.changelog-companyinfo_identifier.xml::add companyinfo.identifier::domi
ALTER TABLE companyinfo ADD identifier VARCHAR(50) NULL;
INSERT INTO DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('add companyinfo.identifier', 'domi', 'db/changelog/db.changelog-companyinfo_identifier.xml', NOW(), 838, '7:b2d3082917bf3ff3aecb6cbc363a5e9c', 'add companyinfo.identifier', '', 'EXECUTED', NULL, NULL, '3.5.3', '3790945685');
-- Changeset db/changelog/db.changelog-companyinfo_identifier.xml::add uk companyinfo.identifier::domi
ALTER TABLE companyinfo ADD CONSTRAINT uk_companyinfo_identifier UNIQUE (identifier);
INSERT INTO DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('add uk companyinfo.identifier', 'domi', 'db/changelog/db.changelog-companyinfo_identifier.xml', NOW(), 839, '7:5d98affa45f814b9ad32bc9c954ed32b', 'addUniqueConstraint constraintName=uk_companyinfo_identifier, tableName=companyinfo', '', 'EXECUTED', NULL, NULL, '3.5.3', '3790945685');
-- Release Database Lock
UPDATE DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1;
据我所知,DB没有与2小时限制相匹配的超时设置:
设置为28.8K秒(8小时)wait_timeout
- 交互式超时:28800
:3600(1小时)salve\u net\u超时时间
- 连接超时:10
:31536000锁定等待超时时间
:30网络读取超时时间
:60net\u write\u超时
- innodb锁定等待超时:50
- 是什么导致liquibase在两小时后失败
- 为什么使用liquibase时DDL的执行速度要慢得多
更新:我已经执行了完全相同的maven/liquibase命令,我现在从Jenkins从我的本地env(也连接到同一个远程数据库)触发该命令-猜猜看:它像一个符咒一样工作,一点问题也没有-该命令在大约20分钟内完成
mvn -f pom.xml process-resources -Pupdate-db -Dliquibase.username=xxx -Dliquibase.password=xxxx -Dliquibase.url=jdbc:mysql://yyyy.xxxx.net:3306/my_db:3306/yooture_ci?characterEncoding=utf8
因此,我最后的猜测是,我们的CI基础设施和DB之间一定存在某种导致问题的原因,但是什么呢?它总是有效的,只是在这种情况下不行…我们终于找到了问题 该问题是由默认AWS NAT配置引起的。说: 如果使用NAT网关的连接空闲5分钟或更长时间 此外,连接超时 它真的很低,而且肯定打破了大多数操作系统的默认配置
mvn -f pom.xml process-resources -Pupdate-db -Dliquibase.username=xxx -Dliquibase.password=xxxx -Dliquibase.url=jdbc:mysql://yyyy.xxxx.net:3306/my_db:3306/yooture_ci?characterEncoding=utf8