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

kch*_*kch 417 mysql max-allowed-packet

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

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

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


这是在我的本地机器上,从MySQL软件包安装MySQL 5的Mac.

我在哪里可以更改max_allowed_packet以导入转储?

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

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

Mic*_*yor 559

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

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

mysql --max_allowed_packet=100M -u root -p database < dump.sql
Run Code Online (Sandbox Code Playgroud)

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

max_allowed_packet=100M
Run Code Online (Sandbox Code Playgroud)

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

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000;
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,使用"set global"会一直工作,直到下一个mysql服务重新启动. (33认同)
  • 仅供参考 - 它帮助我解决了一个不同的错误 - "#2006服务器已经消失" (10认同)
  • 猜测企业支持仍然胜过这个社区的事情:P (9认同)
  • 对于那些使用 PHPMyAdmin 的人,我可以通过从 PHPMyAdmin 的主页开始,然后单击变量选项卡来执行此技术,然后您可以搜索“数据包”或“缓冲区”以缩小范围并从那里进行编辑。 (4认同)
  • 在CentOS 5上,my.cnf位于/etc/my.cnf (3认同)
  • 跳过"设置全局"和最后的";" 将这些值添加到my.ini或my.cnf文件时.例如:my.conf中的"net_buffer_length = 1000000". (2认同)

Jos*_*Fox 121

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

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

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

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000; 
Run Code Online (Sandbox Code Playgroud)

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

  • 解决了我的问题; 我正在做的导入是一次性的,我不能轻易改变配置.这很有效.:d (2认同)

GHa*_*Had 37

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

[mysqld]

max_allowed_packet = 10M
Run Code Online (Sandbox Code Playgroud)

  • 在mac上,文件显然位于其他地方. (5认同)
  • 当然,但配置仍然在某处,虽然我不知道确切的位置 (2认同)

kch*_*kch 16

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

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

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


Ami*_*jan 13

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

max_allowed_packet=100000000
net_buffer_length=1000000 
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,那么尝试改为

max_allowed_packet=100M
net_buffer_length=100K 
Run Code Online (Sandbox Code Playgroud)


Pri*_*ome 11

修复是增加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)
Run Code Online (Sandbox Code Playgroud)

然后导入转储:

gunzip < dump.sql.gz | mysql -u admin -p database
Run Code Online (Sandbox Code Playgroud)


小智 8

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

SET GLOBAL max_allowed_packet=1073741824;
Run Code Online (Sandbox Code Playgroud)

并使用此查询检查 max_allowed_pa​​cket

SHOW VARIABLES LIKE 'max_allowed_packet';
Run Code Online (Sandbox Code Playgroud)


Mik*_*ike 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
#
Run Code Online (Sandbox Code Playgroud)


Tom*_*icz 5

使用max_allowed_packet变量发出如下命令

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

  • 试过了,没用。整个转储为 272mb,尝试使用比该值更高的最大值。 (2认同)

jpl*_*rom 5

与你的问题有点无关,所以这是谷歌的一个。

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

我刚刚因代码中意外地包含未闭合的字符串文字而出现此错误。手指粗心的情况时有发生。

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

  • 由于 SQL 损坏,我也收到此错误。更具体地说,我的表具有空约束,并且我的代码正在插入空值。MySQL 没有给我一个信息性错误,而是返回了“max_allowed_pa​​cket”错误。如果对将来的人有帮助,我正在使用 pandas API `df.to_sql(...)` 进行 INSERTing (2认同)