MySQL设置max_allowed_packet解决Packet for query is too large错误

时间:2022-06-01 17:02:49

MySQL在批量插入数据,当数据量过大时,可能会报一下错误:

Packet for query is too large (1344576 > 1048576 ). You can change this value on the server by setting the max_allowed_packet' variable.

此错误是MySQL限制了服务器接收数据包的大小。如提示所说,我们可以设置max_allowed_packet,改变MySQL对接收数据包大小的限制。

查看max_allowed_packet的值

mysql> show VARIABLES like '%max_allowed_packet%';
+--------------------------+------------+
| Variable_name      | Value   |
+--------------------------+------------+
| max_allowed_packet    | 1048576  |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set (0.00 sec)

max_allowed_packet当前的值为1048576,即1M(1024*1024)。

修改max_allowed_packet

MySQL有两种方法修改max_allowed_packet。

  1. 在配置my.cnf(windows为my.ini)配置,需要重启mysql服务器
  2. 在mysql命令行设置,不需要重启mysql服务器

my.cnf配置max_allowed_packet

Linux的my.cnf的位置一般在/etc/下,即/etc/my.cnf。在my.cnf的[mysqld]节点添加max_allowed_packet,如下:

[mysqld]
max_allowed_packet=10M

在my.cnf修改后,需要重启mysql。

service mysqld restart 
service mysql restart (5.5.7版本命令)

在mysql命令行设置

使用set命令,添加global对max_allowed_packet设置。

mysql>set global max_allowed_packet = 10*1024*1024

设置成功后对新的会有效。