Packet for query is too large


数据库在批量插入的时候报了下面的错误

You can change this value on the server by setting the 'max_allowed_packet' variable. 
; Packet for query is too large (5,975,630 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.;

原因 max_allowed_packet表示MySQL Server或者客户端接收packet的最大大小,packet即数据包,MySQL Server和客户端都有这个限制。

查看 mysql 的 max_allowed_packet

show variables like '%max_allowed_packet%'

输出如下

+----------------------------+------------+
| Variable_name              | Value      |
+----------------------------+------------+
| max_allowed_packet         | 67108864   |
| mysqlx_max_allowed_packet  | 67108864   |
| replica_max_allowed_packet | 1073741824 |
| slave_max_allowed_packet   | 1073741824 |
+----------------------------+------------+

上面value的单位是字节数,1兆等于1024 * 1024 = 1048576字节,所以 67108864 字节就是 64M.

修改 max_allowed_packet

通过sql修改(不推荐)

SET GLOBAL max_allowed_packet = 16777216;

但是这个修改在mysql重启后就丢失了。而且这个修改后,你需要先断开一下数据库连接,然后在重新查询才能看看到修改

通过配置文件修改

在MySQL 8.1.0版本中,使用Homebrew安装MySQL,则 my.cnf 文件位于/usr/local/etc/my.cnf
添加如下配置

max_allowed_packet = 8M

修改完成记得重启一下


评论
  目录