MySQL的“ max_allowed_pa​​cket”设置实际上控制什么?


8

在过去的四个小时中,我们一直在清理数据库问题,这要归功于发生的故障mysqldump并没有引起足够的错误。我们遇到了以下错误:

mysqldump: Error 2020: Got packet bigger than "max_allowed_packet" bytes when dumping table "search_dataset" at row: 68014

这种设置有什么用呢?显然不是IP数据包的大小,因为我现在将其设置为32M。为什么存在?

Answers:


7

根据“了解MySQL内部知识”(ISBN 0-596-00957-7)第99页,这里是第1-3段对此进行了解释:

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

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

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

这可能是我见过的max_allowed_pa​​cket的最完整的解释。我从书中直接输入了这3个段落。


感谢您发布。似乎暗示“数据包”的意思是“ IP数据包”。
Randolf Richardson

好答案。我想这与我得到一个真实答案的距离很近。(我仍然很确定这不是在指IP数据包。它在任何地方都没有提到IP,我相信65535字节通常是甚至零碎IP数据包的实际限制。)
Plutor 2011年

1

该文档在此处进行了详细说明:

“一个数据包或任何生成的/中间的字符串的最大大小。

该文档还继续讨论BLOB以及此设置如何与它们关联。


那并不能真正回答我的问题。在这种情况下什么是数据包?它实际上是IP数据包吗?有没有比简单的字节数限制更好的方法来捕获格式错误的数据?
Plutor

除非他们将“数据包”定义为其他内容(在文档中没有出现),否则可以合理地预期“数据包”是指IP数据包。
兰道夫·理查森2011年

我在一本书中找到了定义。我加了那本书的摘录作为答案。
RolandoMySQLDBA 2011年
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.