MySQL异常:com.mysql.jdbc.PacketTooBigException: Packet for query is too large

151 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

问题

之前运行的项目忽然间今天不好使了,报错如下:

Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1070 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.

; Packet for query is too large (1070 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.; nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1070 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.

解决

这个问题的原因是什么呢?

他是因为Mysql的max_allowed_packet设置过小引起来的问题,我一开始设置的大小为1M,上面的错误提示也很明确了,查出的是1070,而我们设置的是1024,小于的结果值,所有会报错。

Mysql会根据配置文件对server接收的数据包大小进行限制,有的时候插入和更新会被max_allowed_packet参数给进行限制,才会导致失败。

那么解决的思路也很清晰,就是将我们的限制该大些即可。所以我们调整为20M

首先我们在客户端,查看一下是否和我们所说的是否一致。

通过下面这条命令查看,我们的配置 show VARIABLES like '%max_allowed_packet%';

image.png

这样,我们修改配置,将max_allowed_packet的值修改的大点、修改完成后重新启动mysql服务即可

set global max_allowed_packet = 210241024*10;

如果是在linux下,其实也可以对配置文件进行修改,对mysql的my.conf文件中天一行内容,如下: max_allowed_packet = 20M;

这样就不用执行上面的set global max_allowed_packet = 210241024*10命令了。

重启命令如下:

service mysql restart

这样我们的调整即完成了。

题外知识点

max_allowed_packet是什么?

他指的是mysql服务器端和客户端之间一次传送数据包的过程中允许的最大数据包大小。

好了,今天关于MySQL异常:com.mysql.jdbc.PacketTooBigException: Packet for query is too large就讲解到这里,欢迎大家留言交流。

也欢迎大家关注我的公众号《coder练习生》