MySQL错误1153 – 获得了大于'max_allowed_pa​​cket'字节的数据包

我正在导入一个MySQL转储,并得到以下错误。

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

显然在数据库中有附件,这使得插入非常大。


这是在我的本地机器上,一台安装有MySQL 5的MySQL的MySQL软件包。

我在哪里更改max_allowed_packet以便能够导入转储?

还有什么我应该设置?

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

您可能必须更改它为客户端(您正在运行以执行导入)和正在运行的守护程序mysqld并接受导入。

对于客户端,您可以在命令行中指定它:

 mysql --max_allowed_packet=100M -u root -p database < dump.sql 

另外, 更改 mysqld部分下的my.cnf或my.ini文件 ,并设置:

 max_allowed_packet=100M 

或者你可以在连接到同一服务器的MySQL控制台中运行这些命令

 set global net_buffer_length=1000000; set global max_allowed_packet=1000000000; 

(为数据包大小使用一个非常大的值。)

正如michaelpryor所说,你必须改变它的客户端守护进程mysqld服务器。

他的客户端命令行的解决scheme是好的,但ini文件并不总是伎俩,取决于configuration。

所以,打开一个terminal,inputmysql来得到一个mysql提示符,然后发出这些命令:

 set global net_buffer_length=1000000; set global max_allowed_packet=1000000000; 

保持mysql提示符打开,并在第二个terminal上运行命令行SQL执行。

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

 [mysqld] max_allowed_packet = 10M 

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

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

您需要将/usr/local/mysql/support-files/my*.cnf一个复制到/etc/my.cnf并重新启动mysqld 。 (如果你安装了MySQL,你可以在MySQL偏好窗格中进行操作。)

在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 

修正是增加MySQL守护进程的max_allowed_pa​​cket。 您可以通过以Super身份login并运行以下命令来对运行的守护程序执行此操作。

 # mysql -u admin -p mysql> set global net_buffer_length=1000000; Query OK, 0 rows affected (0.00 sec) mysql> set global max_allowed_packet=1000000000; Query OK, 0 rows affected (0.00 sec) 

然后导入你的转储:

 gunzip < dump.sql.gz | mysql -u admin -p database 

在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 # 

使用发出类似命令的max_allowed_packetvariables

mysql --max_allowed_packet=32M -u root -p database < dump.sql

与您的问题略有不同,所以这里是Google的一个。

如果你没有mysqldump的SQL,可能是你的SQL坏了。

我刚刚得到了这个错误,我的代码中意外地有一个unclosedstring文字。 Sl fingers的手指发生。

这是一个奇妙的错误消息来获得失控的string,感谢MySQL!

max_allowed_packet为更高值是一种安全风险,因为攻击者可以推送更大的数据包并使系统崩溃。

所以, max_allowed_packet最佳值被调整和testing。

根据需要更改(使用set global max_allowed_packet = xxx比将它作为my.inimy.conf的一部分更好

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

也就是说,假设你用mysqldump转储它。 如果你使用了其他工具,那么你是自己的。

我在一个共享的宿主环境中工作,我已经托pipe了一个基于Drupal的网站。 我无法编辑my.ini文件或my.conf文件。

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

编辑 – 删除表为我创build了问题,因为Drupal期待这些表应该存在。 所以我清空了解决问题的这些表格的内容。

有时types设置:

 max_allowed_packet = 16M 

在my.ini中不起作用。

尝试确定my.ini如下:

 set-variable = max_allowed_packet = 32M 

要么

 set-variable = max_allowed_packet = 1000000000 

然后重新启动服务器:

 /etc/init.d/mysql restart 
Interesting Posts