首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >小白学习MySQL - max_allowed_packet

小白学习MySQL - max_allowed_packet

作者头像
bisal
发布2021-09-06 14:15:57
发布2021-09-06 14:15:57
1.1K0
举报

在程序中执行一个插入MySQL表操作的时候,提示了这个错误,

代码语言:javascript
复制
Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: 
Packet for query is too large (25,299,161 > 4,194,304). 
You can change this value on the server by setting the 'max_allowed_packet' variable.; 

意思是当前的网络包大小是25299161,超过了4194304,按照提示,这个应该是max_allowed_packet参数控制的,如下所示,

代码语言:javascript
复制
mysql> show variables like 'max_allowed_packet%';
+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| max_allowed_packet       | 4194304    |
+--------------------------+------------+
2 rows in set (0.01 sec)

4194304换算一下就是4M,25299161就是24M,因此设置个30M容量,如果要重启生效,需要改下my.cnf,增加这个参数,

代码语言:javascript
复制
max_allowed_packet = 30M 

如果要即时生效,可以执行这个,但是要具备权限,

代码语言:javascript
复制
mysql> set global max_allowed_packet=30*1024*1024;
ERROR 1227 (42000): Access denied; 
you need (at least one of) the SUPER privilege(s) for this operation

切换用户,重新执行下,

代码语言:javascript
复制
mysql> set global max_allowed_packet=31457280;
Query OK, 0 rows affected (0.00 sec)

但是很奇怪,从显示上看,好像未生效?

代码语言:javascript
复制
mysql> show variables like 'max_allow%';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
|max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.01 sec)

搜了一些资料,有的说是客户端的问题,其实已经改了,重新登录即可,尝试一下,确实生效了,

代码语言:javascript
复制
mysql> show variables like 'max_allow%';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
|max_allowed_packet  | 31457280 |
+--------------------+----------+
1 row in set (0.00 sec)

再次执行程序,此时的插入,就正常了,但是既然MySQL设置了max_allowed_packet,就会有他的作用,例如在带宽有限的场景,可能就需要他来控制网络传输量了,不能让网络传输,成为瓶颈。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档