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


430

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

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

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


这是在我的本地计算机上,一台从MySQL软件包安装了MySQL 5的Mac。

我在哪里更改max_allowed_packet才能导入转储?

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

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



@Muleskinner,这个问题是在您提到的那个问题的3年之前发布的,我要指出的是在您发表评论后的4年。:p
tiomno

2
Webyog.com链接已断开:404
Pathros,

在这里,当JetBrains使用DataGrip 2016.1连接到MySQL数据库时,密码输入错误导致了类似的错误“查询包太大(5526600> 1048576)。”,并在纠正后得到了解决(使用正确的密码)对应于MySQL数据库用户)。
nyedidikeke

Answers:


589

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

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


我有一台具有16 GB RAM的服务器,将其设置max_allowed_packet为100 MB 是一个坏主意吗?
网络

11
仅供参考-它帮助我解决了一个不同的错误-“#2006服务器已消失”
itsho 2011年

37
请注意,在下次重启mysql服务之前,使用“ set global”是可行的。
将剃须刀

2
跳过“设置全局”和最后一个“;” 将这些值添加到my.ini或my.cnf文件时。例如:my.conf中的“ net_buffer_length = 1000000”。
Rustavore

3
在CentOS 5上,my.cnf位于/etc/my.cnf
Rustavore 2014年

124

作为michaelpryor说,你必须改变它为双方的客户守护程序mysqld服务器。

他为客户端命令行提供的解决方案很好,但是ini文件并非总能做到这一点,具体取决于配置。

因此,打开终端,输入mysql以获得mysql提示符,然后发出以下命令:

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

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


2
为我解决了问题;我正在执行的导入是一次性的,并且我无法轻松更改配置。这很棒。:D
罗伯·霍华德

39

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

[mysqld]

max_allowed_packet = 10M

5
在Mac上,文件显然位于其他位置。
kch

2
可以,但是配置仍然存在,尽管我不知道确切位置
GHad

在使用MariaDB的Fedora 20中,对于我来说,将该设置放在/etc/my.cnf.d/server.cnf的末尾就可以了。我当然必须重新启动服务... sudo nano systemctl重新启动mariadb.service
Ray Foss

该文件更可能是“ my.cnf”和在nix系统上,通常在/ etc /或/ usr / local / etc中。编辑后,请确保重新启动mysql服务器以应用更改。
克里斯,

17

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

默认情况下,找不到my.cnf。

你需要复制一个/usr/local/mysql/support-files/my*.cnf/etc/my.cnf并重新启动mysqld。(如果已安装,则可以在MySQL首选项窗格中进行。)


OSX的默认配置似乎是my-medium.cnf,尽管在my-large.cnf中max_allowed_pa​​cket大小是相同的……直到您开始更改内容为止:)
Chris Burgess

在我的情况下,/usrl/local/mysql/my.cnf直到将其复制到/etc/my.cnf才起作用。
VG 2015年

14

在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 

12

解决方法是增加MySQL守护程序的max_allowed_pa​​cket。您可以通过以超级用户身份登录并运行以下命令,对正在运行的守护程序执行此操作。

# 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

您在哪个版本的MySQL上运行它?
crmpicco

6

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


4

与您的问题无关,因此这里是Google的问题之一。

如果没有mysqldump SQL,则可能是您的SQL已损坏。

我只是在我的代码中意外包含未封闭的字符串文字而收到此错误。马虎的手指发生了。

对于失控的字符串,这是一条奇妙的错误消息,感谢MySQL!


1
由于SQL损坏,我也收到此错误。更具体地说,我的表具有空约束,并且我的代码正在插入空值。MySQL没有给出提示性错误,而是返回了max_allowed_packet错误。如果将来对他们有帮助,我正在使用熊猫API进行插入df.to_sql(...)
Alex

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

1

拥有安全隐患 max_allowed_packet较高的价值,因为攻击者可能会推送更大尺寸的数据包并使系统崩溃。

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

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


0

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

因此,我删除了所有与之相关的表,Cache因此可以解决此问题。我仍然在寻找解决此问题的完美解决方案/方式。

编辑 -删除表对我来说造成了问题,因为Drupal希望这些表应该存在。因此,我清空了这些表的内容,从而解决了问题。


0

错误:

第6772行的错误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

-1

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

也就是说,假设您使用mysqldump进行了转储。如果您使用其他工具,那您就一个人了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.