小白学习MySQL – max_allowed_packet

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

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参数控制的,如下所示,

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,增加这个参数,

max_allowed_packet = 30M

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

mysql> set global max_allowed_packet=3010241024;
ERROR 1227 (42000): Access denied;
you need (at least one of) the SUPER privilege(s) for this operation

切换用户,重新执行下,

mysql> set global max_allowed_packet=31457280;
Query OK, 0 rows affected (0.00 sec)

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

mysql> show variables like ‘max_allow%’;
+——————–+———+
| Variable_name | Value |
+——————–+———+
|max_allowed_packet | 4194304 |
+——————–+———+
1 row in set (0.01 sec)

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

mysql> show variables like ‘max_allow%’;
+——————–+———-+
| Variable_name | Value |
+——————–+———-+
|max_allowed_packet | 31457280 |
+——————–+———-+
1 row in set (0.00 sec)

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

小白学习MySQL,

《小白学习MySQL – mysqldump保证数据一致性的参数差异》

《小白学习MySQL – 查询会锁表?》

《小白学习MySQL – 索引键长度限制的问题》

《小白学习MySQL – MySQL会不会受到“高水位”的影响?》

《小白学习MySQL – 数据库软件和初始化安装》

《小白学习MySQL – 闲聊聊》

近期更新的文章:

《PG逻辑复制的REPLICA IDENTITY设置》

《最近碰到的几个问题》

《Linux的dd指令》

《Oracle、SQL Server和MySQL的隐式转换异同》

《JDK的版本号解惑》

文章分类和索引:

《公众号700篇文章分类和索引》

声明:文中观点不代表本站立场。本文传送门:http://eyangzhen.com/422107.html

联系我们
联系我们
分享本页
返回顶部