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

时间:2008-09-18 14:38:15

标签: mysql max-allowed-packet

我正在导入MySQL转储并收到以下错误。

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

显然,数据库中有附件,这会产生非常大的插入。


这是在我的本地计算机上,一个安装了MySQL 5的MySQL的Mac。

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

还有什么我应该设置的吗?

刚刚运行mysql --max_allowed_packet=32M …会导致同样的错误。

14 个答案:

答案 0 :(得分:537)

您可能必须为客户端(您正在运行以执行导入)和正在运行并接受导入的守护程序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;

(对数据包大小使用非常大的值。)

答案 1 :(得分:121)

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

他对客户端命令行的解决方案很好,但是根据配置,ini文件并不总能解决问题。

因此,打开一个终端,键入mysql以获取mysql提示符,并发出以下命令:

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

保持mysql提示符处于打开状态,并在第二个终端上运行命令行SQL执行..

答案 2 :(得分:37)

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

[mysqld]

max_allowed_packet = 10M

答案 3 :(得分:16)

在mysql.com dmg软件包分发中使用MySQL时,在Mac OS X上重新启用my.cnf

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

您需要将/usr/local/mysql/support-files/my*.cnf之一复制到/etc/my.cnf并重新启动mysqld。 (如果安装了它,可以在MySQL偏好设置面板中执行此操作。)

答案 4 :(得分:12)

在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 

答案 5 :(得分:10)

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

# 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

答案 6 :(得分:5)

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

答案 7 :(得分:4)

使用max_allowed_packet变量发出命令,如

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

答案 8 :(得分:4)

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

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

我只是在我的代码中意外地使用了一个未关闭的字符串文字而出现此错误。发邋的手指。

这是一个非常棒的错误信息,可以获得失控的字符串,感谢MySQL!

答案 9 :(得分:1)

有时会输入设置:

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

答案 10 :(得分:1)

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

因此,max_allowed_packet的最佳价值需要调整和测试。

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

答案 11 :(得分:0)

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

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

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

答案 12 :(得分:0)

错误:

  

第1772行的错误1153(08S01):得到的数据包大于   'max_allowed_pa​​cket'字节操作失败,退出代码为1

查询:

SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet'; 

最大值:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824

答案 13 :(得分:-1)

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

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

相关问题