MySQL 错误 1153 - 收到的数据包大于“max_allowed_packet”字节

问题描述 投票:0回答:15

我正在导入 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 …
导致了同样的错误。

mysql mariadb mysql-connector mariadb-10.5 max-allowed-packet
15个回答
753
投票

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

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

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

另外,更改 mysqld 部分下的 my.cnf 或 my.ini 文件(通常位于 /etc/mysql/ 中)并设置:

max_allowed_packet=100M

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

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

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


143
投票

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

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

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

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

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


49
投票

可以在服务器部分下的

my.ini
文件(在 Windows 上,位于 \Program Files\MySQL\MySQL Server)中进行更改,例如:

[mysqld]

max_allowed_packet = 10M

18
投票

在 Mac OS X 上使用来自 mysql.com dmg 包分发的 MySQL 时重新定义 my.cnf

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

您需要将

/usr/local/mysql/support-files/my*.cnf
之一复制到
/etc/my.cnf
并重新启动
mysqld
。 (如果您安装了 MySQL,您可以在 MySQL 首选项窗格中执行此操作。)


17
投票

修复方法是增加 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

17
投票

在 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 

7
投票

在 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
投票

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

SET GLOBAL max_allowed_packet=1073741824;

并使用此查询检查 max_allowed_packet

SHOW VARIABLES LIKE 'max_allowed_packet';

5
投票

使用

max_allowed_packet
变量发出如下命令

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


5
投票

与您的问题有点无关,所以这是 Google 的一个。

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

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

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


3
投票

错误:

第 6772 行出现错误 1153 (08S01):收到的数据包大于 “max_allowed_packet”字节操作失败,退出代码为 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

2
投票

有时键入设置:

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

2
投票

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

因此,需要调整和测试

max_allowed_packet
的最佳值。

是为了更好的在需要的时候改变(使用

set global max_allowed_packet = xxx
而不是将其作为 my.inimy.conf 的一部分。


1
投票

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

my.ini
文件或
my.conf
文件。

所以,我删除了所有与

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

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.