我的情况很简单 .
我有一台配置了max_allowed_packet设置为16M的服务器 . 它正在运行Percona Server 5.1.52 .
我在perl中写了一个简单的脚本来做大量的插件 . 通过了解我通过DBI发送的数据字符串有多大,我大致了解数据包的大小 .
无论大小插入MySQL的大小如何接受数据包并进行插入,但我希望它能为16M以上的任何东西提供一个数据包太大的错误 .
这里真的很奇怪......
如果我将max_allowed_packet设置为16777215(比16M少一个字节)或任何更低的值我得到超过该大小的数据包的错误,显然不会得到该大小下的数据包的错误 .
因此,似乎在任何低于16M的情况下都遵守了数据包限制,但是16M或更高,并且它完全被忽略 .
有什么可能导致这种情况的想法?这真是奇怪而且大多数人都遇到了与max_allowed_packet相反的问题 .
mysql客户端是否可能正在进行一些自动分块?服务器似乎只运行一个大查询,因此自动分块似乎不太可能,因为它可能显示为多个插入 .
我可以检查任何变量以获得有关正在发生的事情的更多信息?
2 回答
你在插什么?如果它只是非常大的BLOB,
max_allowed_packet
没有效果 .常规字段的消息被分割并重新组装为网络协议 . 该参数用于传递BLOB字段 . 见documentation .
我将此报告为MySQL错误,并且已经过验证 . 所以,我想这就是现在 .
这是5.1.52及以上的问题 .
错误报告:http://bugs.mysql.com/58887