max_allowed_packet设置问题
最近在运行的项目出现了一个线上事故,有人反映商城的东西下不了单了,到后台看了一下,果然报了一个错
Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1046 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.; ]; Packet for query is too large (1046 > 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 (1046 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
其实上面的报错信息就给出了解决方案了,原来mysql根据配置文件会限制server接受的数据包大小。如果一次插入数据库中的数据太大的话就会失败,官方也有这方面的介绍 官方介绍
用命令行查看show VARIABLES like '%max_allowed_packet%';果然max_allowed_packet太小了
解决方法
1、修改配置文件(推荐)
在mysql中的my.ini文件中(在programdata隐藏文件中),修改max_allowed_packet的值
比如:max_allowed_packet=20M
然后重启mysql就可以
2、命令行中设置
set global max_allowed_packet = 210241024*10 然后退出命令行后再登录查看show VARIABLES like '%max_allowed_packet%'
但是这个方法没什么用,因为重启mysql服务后这个方法就失效了
又出现问题了,过了几天max_allowed_packet又被改了,经排查可能是数据库被入侵了,原来数据库的密码太过于简单,改成了复杂的密码后再也没出现这个问题了