错误描述:
今天在手机端查看之前上线的项目时,突然报了下面的错误。再之后用电脑登陆,其他设备登陆都一直报这个错误。
错误信息:
### 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
最终解决方案:
修改配置文件,并重启mysql
注意:该值设置过小将导致单个记录超过限制后写入数据库失败,且后续记录写入也将失败。