微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

阿里云部署tomcat服务数据库连接异常

【环境】

使用的是阿里云,用的是docker 部署MysqL的方式,将数据挂载在宿主机上面

关于docker部署MysqL的方式这里不再记录

【问题描述】:

Caused by: com.MysqL.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 59,977 milliseconds ago.  The last packet sent successfully to the server was 1 milliseconds ago.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.MysqL.jdbc.Util.handleNewInstance(Util.java:404)
        at com.MysqL.jdbc.sqlError.createCommunicationsException(sqlError.java:988)
        at com.MysqL.jdbc.MysqLIO.reuseAndReadPacket(MysqLIO.java:3552)
        at com.MysqL.jdbc.MysqLIO.reuseAndReadPacket(MysqLIO.java:3452)
        at com.MysqL.jdbc.MysqLIO.checkerrorPacket(MysqLIO.java:3893)
        at com.MysqL.jdbc.MysqLIO.sendCommand(MysqLIO.java:2526)
        at com.MysqL.jdbc.MysqLIO.sqlQueryDirect(MysqLIO.java:2673)
        at com.MysqL.jdbc.ConnectionImpl.execsql(ConnectionImpl.java:2549)
        at com.MysqL.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
        at com.MysqL.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962)
        at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:227)
        at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:692)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:633)

【网上给出的解决办法】

数据库重启或数据库空闲连接超过设置的最大timemout时间,数据库会强行断开已有的链接,最大timeout时间可以通过命令show global variables like "wait_timeout";

可以参考文章https://www.cnblogs.com/chrischennx/p/7279215.html?utm_source=itdadao&utm_medium=referral

修改了超时时间,重启容器仍旧不好用,后来采用的是修改数据源配置参数的方式

重启服务,又有一个新的错误

com.MysqL.jdbc.exceptions.jdbc4.MysqLNonTransientConnectionException: Could not create connection to database server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.MysqL.jdbc.Util.handleNewInstance(Util.java:404)
    at com.MysqL.jdbc.Util.getInstance(Util.java:387)
    at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:917)
    at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:896)
    at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:885)

但是我使用Navicat for MysqL 连接没有问题,但是一用项目连接就出现上面错误

造成这个错误的主要原因是安装的是MysqL7.0版本,而项目使用的驱动包是5.1版本,将项目驱动版本改成8.0.11成功解决了此问题。

注意:MysqL Connectors 官方文档 上面只有version8.0和version5.1两个版本的文档(
.version8.0文档上有说明:Connector/J 8.0 provides compatibility with all the functionality of MysqL 5.5, 5.6, 5.7, and 8.0(都兼容)

Table 2.1 Summary of Connector/J Versions

Connector/J version JDBC version MysqL Server version JRE Supported JDK required for Compilation Status
8.0 4.2 5.6, 5.7, 8.0 1.8.x 1.8.x General availability. Recommended version.
5.1 3.0, 4.0, 4.1, 4.2 5.6*, 5.7*, 8.0* 1.5.x, 1.6.x, 1.7.x, 1.8.x* 1.5.x and 1.8.x General availability

重启服务,又双叒叕有一个新的错误

MysqL  报错java.sql.sqlException: null,  message from server: "Host 'xx.xx.xx.xx' is blocked because of many connection errors; unblock with 'MysqLadmin flush-hosts'"

【原因】

说明MysqLd已经得到了大量(max_connect_errors)的主机'hostname'的在中途被中断了的连接请求。在 max_connect_errors次失败请求后,MysqLd认定出错了(象来自一个黑客的攻击),并且阻止该站点进一步的连接,直到某人执行命令 MysqLadmin flush-hosts。

【网上给出的解决方案】

第一种:

1、cd /usr/local/MysqL/bin

2、MysqLadmin flush-hosts

第二种:

1:登录MysqL控制台:MysqL -uroot -p

2:flush hosts

第三种:

选中数据库----刷新----权限

 

我的解决方案,敲黑板~~!!!

我直接把docker容器删了,容器启动一个新的容器,因为数据已经挂载了宿主机上面,所以根本不担心数据丢失的问题!!

好了,问题到此解决

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐