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

Posted

技术标签:

【中文标题】MySQL 错误 1153 - 收到的数据包大于“max_allowed_pa​​cket”字节【英文标题】:MySQL Error 1153 - Got a packet bigger than 'max_allowed_packet' bytes 【发布时间】:2010-09-10 17:22:41 【问题描述】:

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

【问题讨论】:

How to change max_allowed_packet size 的可能重复项 @Muleskinner,这个问题是在你提到的那个问题之前 3 年发布的,我在你发表评论 4 年后指出了这一点。 :p Webyog.com 链接已损坏:404 Here,在使用 JetBrains 的 DataGrip 2016.1 连接到 MySQL 数据库时,类似的错误“查询数据包过大 (5526600 > 1048576)。”是由错误的密码输入引起的,并在纠正后得到解决(使用与MySQL数据库用户对应的正确密码)。 【参考方案1】:

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

[mysqld]

max_allowed_packet = 10M

【讨论】:

在 Mac 上,文件显然位于其他位置。 当然,但配置仍在某处,虽然我不知道确切位置 对于我在 Fedora 20 和 MariaDB 中的我来说,将该设置放在 /etc/my.cnf.d/server.cnf 的末尾就可以了。我当然必须重新启动服务...... sudo nano systemctl restart mariadb.service 该文件更可能是“my.cnf”并且在 nix 系统上,通常在 /etc/ 或 /usr/local/etc 中。编辑后,请务必重新启动 mysql 服务器以应用更改。【参考方案2】:

使用max_allowed_packet 变量发出类似的命令

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

【讨论】:

试过了,没用。整个转储大小为 272mb,尝试过的最大值高于此值。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

仅供参考 - 它帮助我解决了一个不同的错误 - “#2006 服务器已消失” 请注意,在下一次 mysql 服务重新启动之前,使用“set global”有效。 跳过“set global”和最后的“;”将这些值添加到 my.ini 或 my.cnf 文件时。例如:my.conf 中的“net_buffer_length=1000000”。 在 CentOS 5 上,my.cnf 位于 /etc/my.cnf 对于那些使用 phpMyAdmin 的人,我可以通过从 PHPMyAdmin 的主页开始,然后单击变量选项卡来执行此技术,然后您可以搜索“数据包”或“缓冲区”以缩小范围并从那里编辑。【参考方案5】:

使用 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 大小是相同的......直到您开始更改内容:) 在我的情况下 /usrl/local/mysql/my.cnf 直到我将它复制到 /etc/my.cnf 才起作用。【参考方案6】:

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

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

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

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

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

【讨论】:

为我解决了问题;我正在做的导入是一次性的,我不能轻易更改配置。这很好用。 :D【参考方案7】:

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

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

我只是在我的代码中意外地包含未闭合的字符串文字而出现此错误。会出现手指松懈。

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

【讨论】:

由于 SQL 损坏,我也收到此错误。更具体地说,我的表有空约束,我的代码正在插入空值。 MySQL 没有给我一个信息性错误,而是返回了max_allowed_packet 错误。如果它对未来的人有帮助,我正在使用 pandas API df.to_sql(...) 插入【参考方案8】:

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

【讨论】:

【参考方案9】:

解决方法是增加 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

【讨论】:

你在哪个版本的 MySQL 上运行这个?【参考方案10】:

在 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 

【讨论】:

【参考方案11】:

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

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

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

【讨论】:

【参考方案12】:

有时打字设置:

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

【讨论】:

【参考方案13】:

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

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

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

【讨论】:

【参考方案14】:

错误:

第 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

【讨论】:

【参考方案15】:

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

SET GLOBAL max_allowed_packet=1073741824;

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

SHOW VARIABLES LIKE 'max_allowed_packet';

【讨论】:

以上是关于MySQL 错误 1153 - 收到的数据包大于“max_allowed_pa​​cket”字节的主要内容,如果未能解决你的问题,请参考以下文章

navicat 导入数据报错 --- 1153 - got a packet bigger than 'max_allowed_packet' bytes

为啥我在使用 Java (Netbeans) 连接到 MySQL 时收到此错误“通信链接失败最后发送的数据包...”? [复制]

如何检查和设置max_allowed_pa​​cket mysql变量[重复]

Navicat for MySQL 还原MySQL8 备份文件提示:1153 - Got a packet bigger than ‘max_allowed_packet‘ bytes

mysql:1153 Got a packet bigger than ‘max_allowed_packet’ bytes的解决方法

mysql数据库导入sql文件时提示“Error Code: 1153 - Got a packet bigger than 'max_allowed_packet' bytes”解决