我导入一个MySQL转储和得到以下错误。

$ mysql foo < foo.sql 
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes

显然,数据库中有附件,需要进行非常大的插入。


这是在我的本地机器上,一台安装了MySQL 5的Mac电脑。

我在哪里改变max_allowed_packet能够导入转储?

还有什么需要我设置的吗?

只是运行mysql——max_allowed_packet=32M…导致同样的错误。


当前回答

我在一个共享托管环境中工作,我托管了一个基于Drupal的网站。我不能编辑my.ini文件或my.conf文件。

所以,我删除了所有与缓存相关的表,因此我可以解决这个问题。我仍然在寻找一个完美的解决方案/方法来处理这个问题。

编辑——删除这些表给我带来了问题,因为Drupal期望这些表应该存在。所以我清空了这些桌子上的东西,问题就解决了。

其他回答

在etc/my.cnf中,尝试将max_allowed _packet和net_buffer_length更改为

max_allowed_packet=100000000
net_buffer_length=1000000 

如果这样不行,那就试着换成

max_allowed_packet=100M
net_buffer_length=100K 

将max_allowed_packet设置为与使用mysqldump转储时相同(或更多)的值。如果不能这样做,请使用较小的值再次转储。

也就是说,假设您使用mysqldump转储了它。如果你使用其他工具,你就只能靠自己了。

这可以在你的my.ini文件(在Windows上,位于\Program Files\MySQL\MySQL Server)下的服务器部分中更改,例如:

[mysqld]

max_allowed_packet = 10M

我已经通过这个查询解决了我的问题

SET GLOBAL max_allowed_packet=1073741824;

并使用此查询检查max_allowed_packet

SHOW VARIABLES LIKE 'max_allowed_packet';

在CENTOS 6 /etc/my.cnf上,在[mysqld]部分下,正确的语法是:

[mysqld]
# added to avoid err "Got a packet bigger than 'max_allowed_packet' bytes"
#
net_buffer_length=1000000 
max_allowed_packet=1000000000
#