错误描述:
今天在手机端查看之前上线的项目时,突然报了下面的错误。再之后用电脑登陆,其他设备登陆都一直报这个错误。
错误信息:
### Error querying database. Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1036 > 1024). You can change this value on the server by setting the max_allowed_packet' variable. ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1036 > 1024). You can change this value on the server by setting the max_allowed_packet' variable. ; SQL []; Packet for query is too large (1036 > 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 (1036 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
主要错误信息:Packet for query is too large (1036 > 1024)
出错的原因就是表面的意思:请求包的大小是1036,而mysql设置的允许的最大包的大小是1024,因此出错。
解决思路:
在抛出的异常信息中已经给出了解决方案:You can change this value on the server by setting the max_allowed_packet' variable.
也就是设置下“max_allowed_packet”的值就好了[什么是max_allowed_packet:MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受 max_allowed_packet 参数限制,导致大数据写入或者更新失败。
]
具体操作:
(1)可以先看下“max_allowed_packet”的值
show VARIABLES like '%max_allowed_packet%';
可以看出我当前的值是1024(修改之前的默认值)
(2)下面就是修改
遇到这个问题后,看了不少博客,说的都是下面的两种解决方案:
1)命令行临时修改(不需要重启mysql)
SET GLOBAL max_allowed_packet=1073741824
2)修改配置文件,可以长久生效的(修改完需要重启mysql)
找到配置文件的目录
mysql –help | grep my.cnf
修改配置文件 (my.cnf)
max_allowed_packet = 20M
我尝试了第一种方法,可以执行成功,但是,修改完依然报错,再通过sql查看时发现值没变。
(值没变的原因:
SET GLOBAL max_allowed_packet=1073741824
注意里面的"GLOBAL",设置的范围是GLOBAL ,但是查看的时候是show VARIABLES like '%max_allowed_ 并没有GLOBAL ,
通过
show GLOBAL VARIABLES like '%sql_mode%';
发现
值确实被修改了
)
详细内容见大佬简书:https://www.jianshu.com/p/629685b97030
注意:该值设置过小将导致单个记录超过限制后写入数据库失败,且后续记录写入也将失败。
3)我选择了比较稳妥的方法,修改配置文件,他然后重启mysal、
原以为这样就不会有问题了,但是!!!在大约一个月后又报了这个错,max_allowed_packet的值又变成了1024,重新打开配置文件,发现里面的值还是20M啊,但是通过命令查询的时候却发现查出来的值是1024,然后我就把mysql重启了一下,在去查询的时候发现配置文件里的配置生效了。由于当时比较忙,也没去查生效值变为1024的原因。之后这个错误又出现了三次,每次都是重启服务器解决。直到有一天数据库中了勒索病毒。库被删了,让用比特币换。才意识到问题的严重性。
具体的才可以查看下面这篇博客: