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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011665991/article/details/89026825

【环境】

使用的是阿里云,用的是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容器删了,容器启动一个新的容器,因为数据已经挂载了宿主机上面,所以根本不担心数据丢失的问题!!

好了,问题到此解决了

猜你喜欢

转载自blog.csdn.net/u011665991/article/details/89026825