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。
- 在配置my.cnf(windows为my.ini)配置,需要重启mysql服务器
- 在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
设置成功后对新的会有效。