在程序中执行一个插入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