我在所有项目中都使用Liquibase,我非常喜欢它处理db更新的方式,但最近我遇到了这个问题:
liquibase : Successfully acquired change log lock
liquibase : Successfully released change log lock
liquibase : Could not release lock
liquibase.exception.LockException: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.
at liquibase.lockservice.StandardLockService.releaseLock(StandardLockService.java:283) ~[liquibase-core-3.5.5.jar!/:na]
at liquibase.Liquibase.update(Liquibase.java:218) [liquibase-core-3.5.5.jar!/:na]
at liquibase.Liquibase.update(Liquibase.java:192) [liquibase-core-3.5.5.jar!/:na]
.
.
.
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.
.
.
liquibase : Failed to restore the auto commit to true
.
.
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 16,913 milliseconds ago. The last packet sent successfully to the server was 89 milliseconds ago.
.
.
Caused by: java.lang.NullPointerException: null
at com.mysql.jdbc.MysqlIO.clearInputStream(MysqlIO.java:899) ~[mysql-connector-java-5.1.46.jar!/:5.1.46]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2477) ~[mysql-connector-java-5.1.46.jar!/:5.1.46]
我的服务器上运行了3个应用程序。其中一个跑了大约20年。第二次运行2个月,第三次是新的。
它们都是Spring Boot应用程序。
当我想更新第二个应用的jar时,我停止了旧的jar,运行了新的jar,但我无法让它以上面的错误开始。然后我运行了同一个应用程序的旧罐子,它一开始就很好。我试着停止并重新启动这个旧罐子,有几次我发现上面的错误,但大多数时候它启动得很好。
我尝试重新启动服务器(这三个应用程序都是在系统启动时作为服务启动的),但由于相同的错误,它们都没有成功启动。甚至连一个连续两年的都没有。我停止所有其他应用程序,然后用这个持久的应用程序再试一次,它一直失败,直到启动。
可能是记忆问题吗?我用的是一个DigitalOcean droplet,有1个内核和2gb内存。
此外,我注意到,当它成功启动日志时,如下所示:
liquibase : Successfully acquired change log lock
liquibase : Reading from myDataBase.DATABASECHANGELOG
liquibase : Successfully released change log lock
注意锁的获取和释放之间的声明。我还怀疑在获取锁和读取变更日志之间存在时间问题。但我不知道我是否可以增加时间,或者我如何才能做到。
我不知道问题的来源,但是在将liquibase-core
更新到v3.7.0后,所有应用程序都正确启动了
关于之前的更新,我测试的不是问题解决了,只是不太频繁。但它已经发生了
经过一番挖掘,我意识到,在发生这种情况的同时,团队正在使用DB连接池。应用程序。属性文件包含以下内容:
spring.datasource.tomcat.initial-size=5
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=5
spring.datasource.tomcat.max-idle=5
spring.datasource.tomcat.min-idle=5
spring.datasource.tomcat.default-auto-commit=true
可悲的是,我对数据库池了解不多。但是引起我注意的是关于自动提交的最后一行。最后一次弹出此错误。我禁用所有这些行和应用程序开始罚款。我不知道这是否只是巧合。
非常感谢你!
我又回到原点了...我不知道如何解决这个问题,任何线索都会受到赞赏
我将mysql连接器java更新为v8。0.15. 我的服务器有MySQL v5。6.33. 我仍然有这个问题,现在我无法重新启动我的应用程序。
在进行上述更改后,现在异常以以下内容结束:
The last packet successfully received from the server was 10,036 milliseconds ago. The last packet sent successfully to the server was 10,036 milliseconds ago.
.
.
.
Caused by: java.io.IOException: Socket is closed
at com.mysql.cj.protocol.AbstractSocketConnection.getMysqlInput(AbstractSocketConnection.java:72) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
at com.mysql.cj.protocol.a.NativeProtocol.clearInputStream(NativeProtocol.java:833) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
... 92 common frames omitted
为了明确起见,我决定通过设置
liquibase从我的项目中禁用liquibase。在
。现在我可以随时启动/停止/重新启动应用程序,没有问题。由于我只使用liquibase来保存数据库,并且我所做的更改都会被执行(问题是在释放锁时),所以我将启用liquibase来更新模式,然后禁用它来运行应用程序应用程序中,enabled=false
。属性
我一次又一次地停止和启动应用程序,每次我都会发现
插座关闭了
,所以我开始思考一个时间问题。。。从抛出的异常中,我注意到,每当它说:
从服务器成功接收的最后一个数据包是xxxx毫秒前。
我在几毫秒前得到的最小值是10.085,碰巧我有同一个应用程序的一些日志,从很久以前就没有出现过这个问题。从这些日志语句中,我测量了获取更改日志锁和释放它之间的时间。令我惊讶的是,这大约是9秒,而且从来没有超过这一秒。
所以我登录到
mysql
控制台并发出:
show variables LIKE '%timeout%';
这给了我一个确定的超时列表。在那里,
connect_timeout
是最小的,设置为10秒。一定是这样。
我在谷歌上搜索如何设置该值。我试图创建一个文件
/etc/my。cnf
并添加:
[mysqld]
connect_timeout=20
然后重启mysql:
sudo /etc/init.d/mysql restart
但是当我登录到mysql控制台时,值仍然是10。所以在mysql控制台我发出了另一个命令:
SET GLOBAL connect_timeout=20;
该值已更新(我不知道重启后是否会持续)
我重新启动mysql,然后。。。瞧!现在,这些应用程序通常在启用liquibase的情况下启动。我很高兴!:-)
你解决了吗?
我遇到了一个类似的问题,并通过强制Liquibase以同步模式执行来解决它。你的spring boot应用是由jhipster开发的吗?如果是这样,请查看数据库配置,并从AsyncSpringLiquibase更改为SpringLiquibase
我们正在使用MySQL 8.0.19。对我来说,这只是一个查询,用于失败的异常导致:java.io.IOExcue:套接字关闭
。
发现对于MySQL 8.0.19,有一个错误报告与类似的堆栈跟踪mine-https://bugs.mysql.com/bug.php?id=99234
在将MySQL服务器升级到8.0.21之后,它开始工作了!没有其他变化。
希望这对那些花了相当长时间处理选定查询(ies)不起作用且有相同错误,并尝试了各种其他选项的人有所帮助。
我一次又一次地停止和启动应用程序,每次我都会发现插座关闭了
,所以我开始思考一个时间问题。。。从抛出的异常中,我注意到,每当它说:
从服务器成功接收的最后一个数据包是xxxx毫秒前。
我在几毫秒前得到的最小值是10.085,碰巧我有同一个应用程序的一些日志,从很久以前就没有出现过这个问题。从这些日志语句中,我测量了获取更改日志锁和释放它之间的时间。令我惊讶的是,这大约是9秒,而且从来没有超过这一秒。
所以我登录mysql控制台并发布:
show variables LIKE '%timeout%';
这给了我一个定义超时的列表。就在那里connect_timeout是最小的,设置为10秒。一定是它。
我在谷歌上搜索如何设置该值。我尝试创建一个文件/etc/my。cnf及其补充:
[mysqld]
connect_timeout=20
然后重启mysql:
sudo /etc/init.d/mysql restart
但是当我登录到mysql控制台时,值仍然是10。所以在mysql控制台我发出了另一个命令:
SET GLOBAL connect_timeout=20;
并且该值已更新(我不知道在服务器完全重启后这种情况是否会持续)
我重新启动mysql,然后。。。瞧!现在,这些应用程序通常在启用liquibase的情况下启动。我很高兴!:-)
我用java从MySQL查询了一些记录。但是在一些查询中,我遇到了一个问题,使查询失败,但在其他情况下,它查询成功。错误消息是下一个: 我尝试过一些方法,比如: 在 但什么都没发生。 我的环境是: MySQL: 5.5.3-m3-log源代码分布 Java: 1.60_16 jdk: HotSpot(TM)64位服务器VM(构建14.2-b01,混合模式) JDBC: mysql连接器-java-
我在Stackoverflow的另一个问题中尝试了这个建议,并在连接方面做了如下更改 但我的项目还是失败了 严重:执行身份验证com时发生异常。mysql。jdbc。例外情况。jdbc4。通信异常:通信链路故障 谁能告诉我克服这个问题的最好方法是什么?
StackOverflow上发布的与通信有关的问题似乎已经够多了。但没有一个能帮我走出困境。 但是,当我试图通过JDBC连接DB服务器时,它仍然失败,出现异常“com.mysql.JDBC.exceptions.jdbc4.CommunicationsException:Communications link Failure”。 测试类如下所示。
我试图连接我的java应用程序与SQL数据库和当我点击保存按钮它给我以下错误 这是我的密码
我有一个带有JDBC mysql连接的服务器,但每天早上检查服务器时都会出现这样的错误: 在com.mysql.jdbc.mysqlio.readfly(mysqlio.java:1395)在com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:1539)在com.mysql.jdbc.mysqlio.checkerrorpacket(mys
我们正在运行一个带有Spring Hibernate MySql的J2EE应用程序,该应用程序在内部使用C3P0和Connector/J进行连池。 C3P0 C3P0配置 我的应用程序在一段时间后内部调用存储过程,我遇到以下错误 错误日志 现在,当我查看数据库日志时,我发现大多数查询都处于“创建排序索引”状态,如下所示 有人能帮我吗... 编辑 1.c3p0初始化日志