在过去的四个小时里,我们一直在清理数据库问题,这要归功于一个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。它为什么存在?
根据“了解 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.cc和 sql/intem_strfunc.cc。
这可能是我见过的对 max_allowed_packet 的最完整的解释了。我直接从书中输入了这 3 个段落。
| 归档时间: |
|
| 查看次数: |
15948 次 |
| 最近记录: |