项目背景是数据库和项目不在同一台服务器下,在启动时,突然遇到以下错误:

  Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

尝试

在运行项目出现以上错误后,我多次尝试后依旧报错,但是我发现,使用客户端Navicat连接数据库,却可以正常连接…

因此

通过搜寻探索,总结如下:
一、学习到 交互式连接以及非交互式链接的区别

1.交互式连接
指的是客户端连接,连接到MySQL服务器,且客户端连接都带有重连机制(断开后操作SQL会自动连接)
(1)指令连接
终端命令行执行连接指令,即可连接到mysql服务器。
$ mysql -hlocalhost -p3306 -uroot -p

$ mysql -uroot -p
Enter password:

(2)工具连接
例如navicat,虽然一个数据库管理工具,但连接MySQL时,其内部也是封装了客户端连接的指令。
mysql -h$ip -P$port -u$user -p

2.非交互式连接
指的是非客户端连接,例如应用程序创建连接池、JDBC连接~

本文开头提到我的应用访问MySQL引起的报错,指的就是非交互式连接断开了。

二、MySQL连接参数

autoReconnect
数据库连接异常,是否自动连接,autoReconnect=true表示自动连接

failOverReadOnly
数据库连接,是否设置为只读模式,failOverReadOnly=false表示只读模式

wait_timeout
wait_timeout 连接超时时间,表示非交互式连接(非交互式连接,wait_timeout才生效),连接处于空闲状态多久,MySQL会被切断掉。默认28800(单位秒,即8小时),这个时间显然是比较短的。所以经常出现有小伙伴反馈说第二天来,再跑项目请求访问数据库时,就抛数据库连接异常的信息了

interactive_timeout
interactive_timeout表示交互式连接后(非交互式连接,interactive_timeout才生效),连接处于空闲状态多久,会被MySQL切断掉。默认28800(单位秒,即8小时)。

问题解决

由于问题原因的不同,这里提供大家几种方式,仅供尝试解决。

1.一种是将SSL=true选项删除掉,但是会报

Establishing SSL connection without server’s identity verification is
not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+
requirements SSL 。。。。等等警告

那么就将useSSL赋值为false,这样就不会警告了。

2.另一种,也就是我所解决的方法

由于wait_timeout默认是8小时,一个空闲的连接超过8小时,MySQL将自动断开连接,连接池却觉得这个连接可用,然后就相当于用失效连接了,然后就出错…

配置操作

2.1配置生效范围

2.1.1指令配置(会话立即生效)
    MySQL> set wait_timeout 604800;

MySQL> set interactive_timeout 604800;
    这种方式只是针对当前会话连接生效,连接断开后重新连接,set配置的wait_timeout会失效,被替换成全局global的interactive_timeout参数值。

2.1.2指令配置(全局立即生效)
    MySQL> set global 604800;

MySQL> set global interactive_timeout 604800;
    配置后立即生效,针对全局的所有连接,即便连接断开重连,set配置的wait_timeout还是生效。

2.1.3文件配置(全局重启mysql后生效)
    vi /etc/my.cnf
    修改MySQL的配置文件,这种方式针对所有连接,优先级最高,修改参数值后,重启MySQL服务生效,会覆盖所有set命令方式配置的wait_timeout、interactive_timeout参数值。

2.2参数配置(问题解决方案)
    2.2.1 配置连接参数
    通过修改应用的配置文件jdbc.properties的数据库连接参数,追加追加红色部分内容:
    jdbc.url=jdbc:mysql://192.168.0.109:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&autoReconnect=true&failOverReadOnly=false

表示采用自动重连机制,这种方式可能会不生效,往下继续配置连接超时时间~

2.2.2 配置连接超时时间
     指令配置(方式一)
    该方式更适用于不需要重启MySQL服务,修改全局wait_timeout超时时间后立刻生效的场景~

第一步:连接mysql
    $ mysql -uroot -p

第二步:查看wait_timeout
    mysql> show global variables like '%timeout%';

第三步:修改时间

mysql> set global wait_timeout=604800;
    mysql> set global interactive_timeout=31536000;

参数值说明:604800=7天,31536000=365天

再次查看wait_timeout

mysql> show global variables like '%timeout%';

文件配置(方式二)
    通过修改MySQL配置文件,重启MySQL服务生效,需谨慎,不能重启MySQL服务器的小伙伴可以通过方式一来实现~

第一步:修改配置文件

vi /etc/my.cnf

Linux操作系统MySQL的配置文件my.cnf 一般存在于/etc/my.cnf,具体按实际安装存放为准~

在[mysqld]后面添加以下内容(604800秒=7天,31536000=365天)

wait_timeout=604800
    interactive_timeout=31536000
    第二步:重启MySQL

修改my.cnf配置文件后,重启mysql才生效!!!!

$ service mysql restart

重启需谨慎,须按实际情况进行考虑!!!

最后,重新发送请求访问应用,看下是否还报连接数据库的报错!

【Mysql】Communications link failure,The last packet sent successfully to the server was 0 millisecond相关推荐

  1. MySQL数据库提示:Communications link failure,The last packet succe

    Last modified:2013-10-08 14:16:47      **********************************************       web网站使用M ...

  2. Communications link failure,The last packet successfully received from the serve

    最近做测试,发现Mysql 过一段时间会无法连接,导致数据库数据不一至,极其郁闷. 使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误: Communications l ...

  3. KettleError connecting to database: (using class org.gjt.mm.mysql.Driver)Communications link failure

    先看错误: 错误连接数据库 [JDOrd] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while ...

  4. 连接mysql异常Communications link failure

    连接mysql 数据库的时候出现这个异常Communications link failure,原因:如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处 ...

  5. Mysql数据库“Communications link failure due to underlying exception”问题

    MySQL默认的空闲等待时间是8个小时,一旦空闲超过8个小时,就会抛出"Communications link failure due to underlying exception&quo ...

  6. 【MySQL】修改配置后,重启MySQL报错[ERROR] The server quit without updating PID file

    问题: 在没有修改配置时,MySQL启动正常: 错1:修改配置后MySQL启动不了,报错: [root@localhost mysql]# service mysql restart Starting ...

  7. 【MySql】解决安装时,无自定义安装

    问题描述: MySql安装时,无法自定义安装路径. 解决方案: 选择自定义安装方式:Custom 点击+号,找到你想要安装的项目,点击向右箭头放到右侧的框内. 放入后,点击右侧框内你的项目,这时候下方 ...

  8. 【MySQL】过年没有回老家,在出租屋里整理了一些思维导图

    Xmind导图知识点 Mysql知识点 SQL知识点 Mybatis知识点 面试题分享 MySQL部分 Mybatis部分 Mysql知识点 通过下面的图片可以看出,MySQL基础语法分为四部分:连接 ...

  9. 【mysql】云服务器被攻击,数据库以及数据都被删除如何通过binlog日志恢复

    前言: 小编买了一台阿里云服务器,然后通过docker 部署了mysql, 然后用了一段时间突然发现数据都没有了,然后就排查问题,发现是被攻击了,如下图 you must pay 0.26BTC,怒了 ...

最新文章

  1. python分析b站_Python爬取并分析B站最热排行榜,我发现了这些秘密
  2. spring 整合websoket(整理)
  3. 【每周NLP论文推荐】 知识图谱重要论文介绍
  4. 进阶面向对象——类的成员
  5. Mysql之乐观锁悲观锁:乐观锁检查数据状态 悲观锁更新时锁定数据
  6. Django框架Day3------之Models
  7. pdf编辑 开源_新闻编辑室看到了开源的光芒
  8. ApacheCN 交流社区一周热点 2019.4 wk1
  9. linux查询匹配个数,查找与linux中目录中的模式匹配的文件数
  10. RPC failed; curl 56 SSLRead() return error -9806
  11. python一对一视频教学-问Python,一对一直播开发需要推流器吗?
  12. Visual Studio的.NET内存分配分析器解析
  13. 美国科技股昨日普遍下跌:华尔街受特朗普影响抛售科技股票
  14. fpga烧写bin文件_FPGA烧写的方式和具体过程分析
  15. 这些单晶XRD测试问题你了解吗?(一)
  16. 开局一张图教你记住HTTP基本格式
  17. iptables: No config file解决方法
  18. c语言的关键字母大小写表示,英语26个字母大小写标准写法
  19. 顶级机构抄底科技股 中概股喜提大佬认可 投资者如何抄作业?
  20. 向所有苦苦拼搏的而立之年的男人们推荐这个电影《老男孩》

热门文章

  1. 《看不见的森林:林中自然笔记》书摘一
  2. Studio 3T的使用
  3. fastdb c++接口
  4. RedisTemplate multiGet
  5. 计算机未来的发展250字,电脑迷250字作文
  6. 关于步进电机励相数、拍数、励磁方式、编码
  7. java null==null是否成立
  8. 软件工程知识点复习第二章
  9. 为什么安装好mysql打不开_MySQL安装完成之后怎么启动? mysql安装完成后怎么
  10. eclipse下连接MYSQL教程