2014-10-06 17 views
0

我使用liquibase和maven。當我通過maven執行我的sql腳本時,我多次得到No operations allowed after connection closed錯誤。 奇怪的部分是,有時它的工作,很多時候我得到這個錯誤。通常它在我執行3-5次之後起作用。當與MySQL一起使用liquibase時,在連接關閉錯誤後,我得到無操作允許

我得到錯誤後,我將我的sql分成5個文件。現在我得到了4. sql或5. sql文件中的錯誤。這似乎是隨機的。

我使用liquibase 3.1.1版本。

數據庫連接配置:

db.driver=com.mysql.jdbc.Driver 
db.url=jdbc:mysql://localhost:3306/ls?zeroDateTimeBehavior=convertToNull&useUnicode=yes&characterEncoding=UTF-8&connectionCollation=utf8_general_ci 
db.username=root 
db.password= 

這是我changelog.xml文件。

<?xml version="1.0" encoding="UTF-8"?> 

<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.1.xsd"> 

    <changeSet id="sql-1" author="team" context="db"> 
     <sqlFile path="schema/model/db-0.0.1.sql" relativeToChangelogFile="true" encoding="utf8"/> 
    </changeSet> 

    <changeSet id="sql-2" author="team" context="db"> 
     <sqlFile path="schema/model/db-0.0.2.sql" relativeToChangelogFile="true" encoding="utf8"/> 
    </changeSet> 

    <changeSet id="sql-3" author="team" context="db"> 
     <sqlFile path="schema/model/db-0.0.3.sql" relativeToChangelogFile="true" encoding="utf8"/> 
    </changeSet> 

    <changeSet id="sql-4" author="team" context="db"> 
     <sqlFile path="schema/model/db-0.0.4.sql" relativeToChangelogFile="true" encoding="utf8"/> 
    </changeSet> 

    <changeSet id="sql-5" author="team" context="db"> 
     <sqlFile path="schema/model/db-0.0.5.sql" relativeToChangelogFile="true" encoding="utf8"/> 
    </changeSet> 

    <include file="etc/db/schema/model/data-0.0.1.xml" relativeToChangelogFile="false"/> 
</databaseChangeLog> 

以下是錯誤:

SEVERE 10/6/14 7:10 PM:liquibase: etc/db/changelog.xml: sql-4::team: Change Set etc/db/changelog.xml::sql-4::team failed. Error: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 
liquibase.exception.UnexpectedLiquibaseException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 
    at liquibase.database.jvm.JdbcConnection.getURL(JdbcConnection.java:79) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:61) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:106) 
    at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1189) 
    at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1172) 
    at liquibase.changelog.ChangeSet.execute(ChangeSet.java:352) 
    at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:40) 
    at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:64) 
    at liquibase.Liquibase.update(Liquibase.java:202) 
    at liquibase.Liquibase.update(Liquibase.java:181) 
    at org.liquibase.maven.plugins.LiquibaseUpdate.doUpdate(LiquibaseUpdate.java:31) 
    at org.liquibase.maven.plugins.AbstractLiquibaseUpdateMojo.performLiquibaseTask(AbstractLiquibaseUpdateMojo.java:24) 
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:377) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.Util.getInstance(Util.java:386) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) 
    at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1304) 
    at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1296) 
    at com.mysql.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:3239) 
    at com.mysql.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:3234) 
    at liquibase.database.jvm.JdbcConnection.getURL(JdbcConnection.java:77) 
    ... 33 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 36 milliseconds ago. The last packet sent successfully to the server was 36 milliseconds ago. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1121) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3673) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3562) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4113) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2812) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2761) 
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:894) 
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732) 
    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:294) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:54) 
    ... 32 more 
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3119) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3573) 
    ... 42 more 
INFO 10/6/14 7:10 PM:liquibase: etc/db/changelog.xml::sql-4::team: Successfully released change log lock 
SEVERE 10/6/14 7:10 PM:liquibase: etc/db/changelog.xml::sql-4::team: Could not release lock 
liquibase.exception.LockException: liquibase.exception.UnexpectedLiquibaseException: liquibase.exception.DatabaseException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 
    at liquibase.lockservice.StandardLockService.releaseLock(StandardLockService.java:234) 
    at liquibase.Liquibase.update(Liquibase.java:206) 
    at liquibase.Liquibase.update(Liquibase.java:181) 
    at org.liquibase.maven.plugins.LiquibaseUpdate.doUpdate(LiquibaseUpdate.java:31) 
    at org.liquibase.maven.plugins.AbstractLiquibaseUpdateMojo.performLiquibaseTask(AbstractLiquibaseUpdateMojo.java:24) 
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:377) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: liquibase.exception.UnexpectedLiquibaseException: liquibase.exception.DatabaseException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 
    at liquibase.lockservice.StandardLockService.hasDatabaseChangeLogLockTable(StandardLockService.java:136) 
    at liquibase.lockservice.StandardLockService.releaseLock(StandardLockService.java:224) 
    ... 26 more 
Caused by: liquibase.exception.DatabaseException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 
    at liquibase.snapshot.jvm.TableSnapshotGenerator.snapshotObject(TableSnapshotGenerator.java:43) 
    at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:59) 
    at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:47) 
    at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:62) 
    at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:47) 
    at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:62) 
    at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:47) 
    at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:62) 
    at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:47) 
    at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:62) 
    at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:47) 
    at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:62) 
    at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:47) 
    at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:62) 
    at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:47) 
    at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:131) 
    at liquibase.snapshot.DatabaseSnapshot.<init>(DatabaseSnapshot.java:36) 
    at liquibase.snapshot.JdbcDatabaseSnapshot.<init>(JdbcDatabaseSnapshot.java:24) 
    at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:129) 
    at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:137) 
    at liquibase.snapshot.SnapshotGeneratorFactory.has(SnapshotGeneratorFactory.java:91) 
    at liquibase.snapshot.SnapshotGeneratorFactory.hasDatabaseChangeLogLockTable(SnapshotGeneratorFactory.java:169) 
    at liquibase.lockservice.StandardLockService.hasDatabaseChangeLogLockTable(StandardLockService.java:134) 
    ... 27 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.Util.getInstance(Util.java:386) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) 
    at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1304) 
    at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1296) 
    at com.mysql.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:3239) 
    at com.mysql.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:3234) 
    at liquibase.snapshot.JdbcDatabaseSnapshot.getMetaData(JdbcDatabaseSnapshot.java:35) 
    at liquibase.snapshot.jvm.TableSnapshotGenerator.snapshotObject(TableSnapshotGenerator.java:31) 
    ... 49 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 36 milliseconds ago. The last packet sent successfully to the server was 36 milliseconds ago. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1121) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3673) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3562) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4113) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2812) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2761) 
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:894) 
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732) 
    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:294) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:54) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:106) 
    at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1189) 
    at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1172) 
    at liquibase.changelog.ChangeSet.execute(ChangeSet.java:352) 
    at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:40) 
    at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:64) 
    at liquibase.Liquibase.update(Liquibase.java:202) 
    ... 25 more 
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3119) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3573) 
    ... 42 more 
WARNING 10/6/14 7:10 PM:liquibase: etc/db/changelog.xml::sql-4::team: Failed to restore the auto commit to true 
+0

我已經改變了外鍵的腳本。當我刪除我的外鍵時,一切運行良好。 – fyelci 2014-11-14 08:08:34

回答

0

我看到有liquibase 3.1.1同樣的錯誤沒有行家。顯然它與MySQL關閉連接有關,因爲它一直處於非活動狀態,但如何避免它在liquibase中是我也想看到的答案。

+0

Liquibase對連接沒有任何特別之處。我沒有看到一個mysql連接URL設置來配置它,但是有一個系統端的wait_timeout設置。 它看起來像你的連接上次使用36ms前,所以它會超時似乎很奇怪。也許是網絡問題? – 2014-10-22 20:44:57

相關問題