MySQL错误读取通信数据包


42

在MySQL错误日志中,我看到了如下这样的警告:

120611 16:12:30 [Warning] Aborted connection 2619503 to db: 'db_name' user: 'user_name' host: 'webapp_hostname' (Got an error reading communication packets)

尚未注意到任何数据丢失本身,因此我想知道此警告的含义或原因,以及是否可以解决引起这些问题的问题。这是在RHEL 6.1和MySQL Enterprise 5.5上。

Answers:


50

MySQL包是MySQL连接的无声杀手之一。

首先,让我们弄清楚什么是MySQL数据包。

根据“了解MySQL内部知识”(ISBN 0-596-00957-7)第99页,这是解释MySQL数据包的1-3段:

MySQL网络通信代码是在假设查询总是相当短的前提下编写的,因此可以将查询以一个块的形式发送到服务器并由服务器进行处理,这在MySQL术语中称为数据包。服务器为临时缓冲区分配内存以存储数据包,并且它请求足够完全容纳它。这种体系结构需要采取预防措施,以避免服务器用尽内存-限制数据包大小,此选项可以实现此目的。

与该选项有关的感兴趣的代码位于 sql / net_serv.cc中。看一下my_net_read(),然后跟随对my_real_read()的调用,并特别注意 net_realloc()

此变量还限制了许多字符串函数的结果的长度。有关详细信息,请参见sql / field.ccsql / intem_strfunc.cc

知道有关MySQL数据包的知识后,即使它们太大了,开发人员/数据库管理员也可以调整它们的大小以容纳一个数据包内的多个BLOB。当然,数据包太小会在这方面引起开放连接的问题。

根据MySQL文档

  • 如果您向服务器发送不正确或太大的查询,您也会收到这些错误。如果mysqld收到的数据包太大或顺序混乱,则认为客户端出了点问题,并关闭了连接。如果需要大型查询(例如,如果使用大型BLOB列),则可以通过设置服务器的max_allowed_pa​​cket变量来增加查询限制,该变量的默认值为1MB。您可能还需要增加客户端上的最大数据包大小。有关设置数据包大小的更多信息,请参见第C.5.2.10节“数据包太大”。

  • 插入很多行的INSERT或REPLACE语句也可能导致此类错误。这些语句中的任何一个都将单个请求发送到服务器,而与要插入的行数无关。因此,通常可以通过减少每个INSERT或REPLACE发送的行数来避免该错误。

建议

尝试将max_allowed_pa​​cket增大到一个更大的数字,因为默认值为1M。我建议您当前数据集中最大的TEXT或BLOB字段的大约10倍。

要将max_allowed_pa​​cket设置为256M,可以将其添加到/etc/my.cnf或my.ini中

[mysqld]
max_allowed_packet=256M

涵盖了mysqld将来的重启。要立即在服务器上安装该值,请运行以下命令:

SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;

试试看 !!!


很好的解释。
Vasilis Lourdas 2012年

4

大多数情况下,默认情况下max_connections为100。尝试增加config参数

max_connections = 400,在my.cnf中设置后,重新启动服务器,或动态设置它:

    set @@global.max_connections = 400;

只需尝试上述建议即可避免出现此警告消息,并确保您的网络没有数据包丢失。


2

从MySQL Enterprise 5.1.x移至5.7.x之后,我最近遇到了此问题,但没有对应用程序进行任何重大代码更改,开始出现“ note ”。

在我的情况下,出现“ note ” 的根本原因是程序在连接仍然打开的情况下退出。没有关闭连接的情况涉及更多,与MySQL不相关,但与ACE,线程和TSS有关。


0

这行my.ini解决了我的问题:

log_error_verbosity=1

引用链接


16
我认为您尚未解决根本的问题,但只是停止了对其进行记录。
user19292'1

1
我有相同的消息报告为“注释”。使用log_error_verbosity = 2实际上可以解决“问题”(但应解决而不是忽略“警告”)
xtian
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.