MySQL--连接超时提示:The driver has not received any packets from the server

【问题描述】

今天访问部署在Linux上Tomcat一直运行的应用时,发现报错了,查看Tomcat日志大致报错信息提示
...last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

通过学习,了解到我引发这个问题的原因是Tomcat运行的应用与MySQL服务器的连接断开了,此时发起任何访问数据库的请求,都会报上面的提示信息~

我个人的解决方案是通过参数配置(增大连接超时时间wait_timeout的值)~

参数配置

这里分析整理后分享出来,希望对遇到这个问题的小伙伴也有帮助,进入正文~

目录

一、交互式与非交互式连接

1.1 交互式连接

1.2 非交互式连接

二、MySQL连接参数

2.1 配置参数说明

2.2 配置生效范围

三、参数配置(问题解决方案)

3.1 配置连接参数

3.2 配置连接超时时间

3.2.1 指令配置(方式一)

3.2.2 文件配置(方式一)

附录


一、交互式与非交互式连接

1.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

1.2 非交互式连接

指的是非客户端连接,例如应用程序创建连接池JDBC连接~

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

二、MySQL连接参数

2.1 配置参数说明

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

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

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

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

2.2 配置生效范围

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

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

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

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

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

三、参数配置(问题解决方案

3.1 配置连接参数

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

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

3.2 配置连接超时时间

3.2.1 指令配置(方式一)

该方式更适用于不需要重启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%';

3.2.2 文件配置(方式一)

通过修改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数据库连接异常主要就是以下那么几种提示。
情况1
...last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
情况2
ERROR 2013 (HY000): Lost connection to MySQL server during query

这两情况就是我们说的非交互式连接,例如跑tomcat运行项目请求访问数据库连接异常。

情况3
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
这种情况,指的是交互式连接,例如客户端连接到mysql>命令行。
细心的小伙伴可能就会问,那为什么即使断开了,还是能执行相关SQL相关操作,这是因为客户端有重连机制Trying to reconnect...这个提示就可以体现出。
 

相信大家看了本文提到的问题及解决方案,对于参数wait_timeout有了一定认知,例如:
1、什么是交互式连接、非交互式连接?
2、会话配置、全局配置、文件配置的生效时间以及级别?
3、wait_timeout 配置生效最大时间是31536000=365天,还是2147483≈24.86天?
4、interactive_timeout对于客户端连接到mysql会生效吗?
5、autoReconnect配置为true后,会检测到mysql连接异常后就会自动进行连接,该配置是对所有mysql版本都有效,还是只是对mysql4.x版本生效?

  • 50
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 41
    评论
根据你提供的引用内容,出现 "The driver has not received any packets from the server." 错误是由于MySQL连接超时导致的。MySQL服务器有一个默认的"wait_timeout"参数,它规定了一个连接的空闲时间超过该时间后会自动断开连接连接池在判断连接是否有效时,并没有校验连接的有效性,因此当应用申请使用已经超时连接时,就会导致该错误的出现。 为了解决这个问题,你可以尝试以下方法: 1. 修改MySQL的"wait_timeout"参数:在my.cnf文件中,将"wait_timeout"的值增大到适当的时间,例如设置为1年(31536000秒)。 2. 检查my.cnf文件的位置:在Ubuntu系统中,默认的my.cnf文件路径可能会有所不同。你可以尝试在/etc/mysql/或/etc/mysql/mysql.conf.d/目录下查找my.cnf文件。如果仍然找不到该文件,你可以创建一个新的my.cnf文件并添加需要修改的参数。 3. 检查MySQL的端口号:如果你重新安装了MySQL,并且遇到了端口号为0的情况,你可以确保端口号被正确设置为3306。 总结一下,你在nacos启动时遇到的报错"The driver has not received any packets from the server."是由于MySQL连接超时导致的。你可以通过修改MySQL的"wait_timeout"参数、确认my.cnf文件的位置以及检查MySQL的端口号来解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [今天遇到一个错误The driver has not received any packets from the server.](https://blog.csdn.net/ShiningSilver/article/details/108473659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾日三省贾斯汀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值