【MySQL】Packet for query is too large

10 篇文章 0 订阅

【线上问题】

昨天订单对接方反应,从我们平台系统下的单,没有传到他们的erp系统中。运营找我处理,因为手头上刚开始开发下周要上线的需求,就用之前写好的补偿机制接口同步过去,以为只是一个订单出问题了,也没查问题。后来,给我发了一堆订单号,说是都没有同步,只能去服务器上查问题了。错误如下:

2018-10-23 13:03:36  [ qtp1867717141-13:4121860953 ] - [ ERROR ] org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions(SqlExceptionHelper.java:146) Packet for query is too large (3038 > 10
24). You can change this value on the server by setting the max_allowed_packet' variable.

【问题原因】

MySQL根据配置文件会限制Server接受的数据包大小。有时候插入、更新或查询时数据包的大小,会受 max_allowed_packet 参数限制,导致操作失败。

查看 max_allowed_packet 参数:

在客户端执行:show VARIABLES like ‘%max_allowed_packet%’;

得到的结果如下:

Variable_nameValue
max_allowed_packet1024

最大只允许1024,也就是1M,所以导致消息在消费的过程中出现错误,订单传递也失败了。

【解决方法】

修改默认最大允许包大小。

方式一:命令方式

(1).在mysql控制台下输入以下命令,设置max_allowed_packet为20M

set global max_allowed_packet = 20*1024*1024; 

(2).退出mysql,重启mysql服务,再登录myql中查询max_allowed_packet是否修改成功

show VARIABLES like '%max_allowed_packet%'; 

方式二:修改配置文件my.cnf方式

(1).mysql控制台下输入以下命令,编辑my.cnf

sudo vi  /etc/mysql/my.cnf 

(2).在[mysqId]下面添加

max_allowed_packet = 20M 

退出编辑模式,重启mysql.

【问题总结】

在处理问题过程中,问运维为什么出现这个问题了,之前并没有出现过。

她给我的答案是可能被别人修改了,但我觉得并不是别人改了参数问题,问题最早是出现在上周日,周一处理了,但周三又有同样的问题。

所以在写这篇博客的过程中,我查了些关于此问题的一些文章,还是觉得应该是服务器内存容量不够的原因。所以mysql可能会自动重设参数。所以某些情况下可能是你当时更改完max_allowed_packet参数,过一段时间mysql自动重设参数变为默认的1024,又出现了同样的错误。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值