MySQL错误1153 -得到的数据包大于'字节

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

548112 次浏览

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

[mysqld]


max_allowed_packet = 10M

使用max_allowed_packet变量发出命令,如

< p > <代码> mysql——max_allowed_packet = 32米 -u root -p database <dump.sql < /代码> < / p >

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

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

您可能必须同时为客户端(您正在运行导入操作)和正在运行并接受导入操作的守护进程mysqld更改它。

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

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

另外,更改my.cnf或my.ini文件(通常在mysqld节的/etc/mysql/中找到)并设置:

max_allowed_packet=100M

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

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

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

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

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

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

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

他为客户端命令行提供的解决方案很好,但是ini文件并不总是有效,这取决于配置。

所以,打开一个终端,输入mysql来得到一个mysql提示符,然后发出这些命令:

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

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

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

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

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

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

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

修正方法是增加MySQL守护进程的max_allowed_packet。通过以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

在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

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

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

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

有时类型设置:

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

max_allowed_packet设为较高的值存在安全风险,因为攻击者可以推送更大尺寸的数据包并使系统崩溃。

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

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

错误:

错误1153 (08S01)在第6772行:得到一个大于 exitcode 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

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

SET GLOBAL max_allowed_packet=1073741824;

并使用此查询检查max_allowed_packet

SHOW VARIABLES LIKE 'max_allowed_packet';