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

这篇具有很好参考价值的文章主要介绍了【Mysql】Communications link failure,The last packet sent successfully to the server was 0 millisecond。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

  Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The 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

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

最后,重新发送请求访问应用,看下是否还报连接数据库的报错!文章来源地址https://www.toymoban.com/news/detail-426532.html

到了这里,关于【Mysql】Communications link failure,The last packet sent successfully to the server was 0 millisecond的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • The last packet sent successfully to the server was 0 milliseconds ago.问题分析

    英文描述 The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 中文描述: 上次成功发送到服务器的数据包是0毫秒前。驱动程序尚未从服务器收到任何数据包。 检查db链接地址,如果db无法连接,那么会出现这个错误,问题描述为

    2024年02月11日
    浏览(33)
  • 已解决The last packet sent successfully to the server was 0 milliseconds ago. The driver has not receiv

    注:此文章是在mysql8版本的前提下编写的。 在我们使用springcloud在连接mysql数据库时,有时会碰到如下这种异常: 为此我上网查了不少资料,在这里小总结一下: 1. 连接url是否正确(自己看看useSSL是否为false): 2.数据库服务是否打开: 找到MySql服务: 3.网上最多解决的等待

    2024年01月16日
    浏览(40)
  • mysql链接错误The last packet successfully received from the server was xxx milliseconds ago解决方案

    线上项目偶尔出现错误,这个错误发现是在项目无人操作一段时间后就产生,如果有人操作,那就不会出现。 具体报错信息 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 385,290,819 milliseconds ago. The last packet sent successfully to the server was

    2024年02月03日
    浏览(46)
  • com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

    com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure CommunicationsException 翻译为: 通信链路故障 但是在mysql高版本中,如果在URL中缺少\\\"useSSL=false\\\"参数可能会导致报错。这是因为MySQL 8.0.33以上的版本默认要求使用SSL(安全套接层)来加密与数据库的连接。 在数据源配置

    2024年04月23日
    浏览(27)
  • com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure错误解决

    项目上线一段时间后,多个环境经常出现com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure错误,堆栈信息如下: The last packet successfully received from the server was 10,003 milliseconds ago. The last packet sent successfully to the server was 10,003 milliseconds ago. at com.mysql.cj.jdbc.exceptions.SQ

    2024年02月07日
    浏览(68)
  • com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

    数据库是MySql。 这个报错目前在生产线上两年来遇到了两次,一次是Dba那边问题数据库down了。导致数据库连不上。 然后偶尔出现了一次这个提示,但数据库并没有挂的。在测试和用户环境也出现了多次,虽然都没影响到业务,但总觉得会是个雷,最近相对有点空余,就研究

    2024年02月09日
    浏览(47)
  • 解决:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

    目录 问题分析步骤一: (刚开始出现问题时,习惯性直接搜索第一行的错误信息,导致走了好多弯路) 解答:如果出现以上问题(问题分析步骤一),则可使用数据库连接工具进行测试,查看连接是否正常,如正常则请看步骤二。如不正常可以查看数据库的wait_timeout的值以判

    2024年02月10日
    浏览(39)
  • 解决com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

    网上有好多解决办法例如: 常见解决方法一 1.检查mysql是否正常连接。IP,端口号,用户名,密码是否正确。至于如何检测,可以使用navicat 测试连接一下。如果连接的上,试试关闭防火墙,让别人连一下你自己的mysql,看看连的上嘛。 常见解决方法二 2.配置文件加上 useSSL=

    2024年02月14日
    浏览(36)
  • 常见错误:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure解决

    最常见错误:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure,如下图: 定位报错位置:    从代码上看,前一步说明jdbc驱动加载成功了,到了这一步报错,无非是传进去的是参数问题,没报用户和密码错误那就是url参数的问题。  本例中原来的参数是 jdbc:my

    2024年04月25日
    浏览(43)
  • mysql连接错误:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    目录 一、遇到问题 二、找到报错具体原因  三、解决办法  在电脑上面有多个mysql版本的时候。可能会启用之前的mysql版本的执行路径,所以导致出现了这个mysql连接错误。 com.mysql.jdbc.exceptions.jdbc4.Commu

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包