Packet for query is too large ,You can change this value

时间:2024-03-31 18:32:53

问题产生:

之前因为需求写了一个将excel数据导入数据库的功能,自己测试了之后也没有问题,然后昨天晚上项目上线的时候,同事将真实的数据先在测试环境上试了下水,结果真水了。(正好晚上我提前跑路了....),但是在正式环境下就可以正常导入,把我搞得有点懵逼,没办法,电脑不在身上,只能早上过来看看。

在测试环境下调试了一下代码,检测出了问题:

Packet for query is too large (2,510,065 > 1,048,576). You can change this value on the server by setting the 'max_allowed_packet' variable.

百度了下,对于 max_allowed_packet 的介绍:

当MySQL客户端或mysqld服务器收到大于max_allowed_packet字节的信息包时,将发出“信息包过大”错误,并关闭连接。对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与MySQL服务器的连接”错误。

客户端和服务器均有自己的max_allowed_packet变量,因此,如你打算处理大的信息包,必须增加客户端和服务器上的该变量。一般情况下,服务器默认max-allowed-packet为1MB

一般来说,如果你的数据库没有设置过 max_allowed_packet 的话,默认值是1M 也就是1024x1024=1048576;  

然后我去使用 show VARIABLES like '%max_allowed_packet%'  进行查看,果然如此

Packet for query is too large ,You can change this value

现在只需要把 max_allowed_packet 的值改大就好了

方法一:

可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。

max_allowed_packet = 10M

如果找文件太麻烦,就用下面这种

方法二:set global max_allowed_packet = 10*1024*1024 (设置值为10M),不能直接写总的结果,我试过好像不行

最后关掉server连接,再用进入

再用 show VARIABLES like '%max_allowed_packet%'  查看值是否发生改变,

到此就结束了。