我导入一个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…导致同样的错误。


当前回答

在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设置为较高的值存在安全风险,因为攻击者可能会推送更大的数据包并导致系统崩溃。

因此,max_allowed_packet的最优值将被调优和测试。

最好在需要时进行更改(使用set global max_allowed_packet = xxx) 而不是把它作为my.ini或my.conf的一部分。

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

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

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

有时类型设置:

max_allowed_packet = 16M

在my.ini中不能工作。

尝试确定my.ini,如下所示:

set-variable = max_allowed_packet = 32M

or

set-variable = max_allowed_packet = 1000000000

然后重启服务器:

/etc/init.d/mysql restart

当使用mysql.com dmg包分发的MySQL时,在Mac OS X上重新使用my.cnf

默认情况下,my.cnf无处可寻。

你需要拷贝一个/usr/local/mysql/support-files/my*.cnf文件到/etc/my.cnf并重新启动mysqld。(如果你安装了它,你可以在MySQL首选项窗格中这样做。)

跟你的问题有点无关,下面是谷歌的问题。

如果您没有mysqldump SQL,则可能是您的SQL被破坏了。

我只是在我的代码中意外地有一个未关闭的字符串文字而得到这个错误。手指不小心会发生。

对于一个失控字符串,这是一个非常棒的错误消息,谢谢MySQL!