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

Plu*_*tor 9 mysql packet

在过去的四个小时里,我们一直在清理数据库问题,这要归功于一个mysqldump没有充分出错的故障。我们收到了这些错误:

mysqldump: Error 2020: Got packet bigger than "max_allowed_packet" bytes when dumping table "search_dataset" at row: 68014
Run Code Online (Sandbox Code Playgroud)

这个设置到底有什么作用?这显然不是 IP 数据包大小,因为我现在将其设置为 32M。它为什么存在?

Rol*_*DBA 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 个段落。