MySQL client/server protocol docs说:
注意
通过压缩通过压缩发送大小为2 24 -5到2 24 -1的MySQL数据包会导致至少一个额外的压缩数据包。如果未压缩的MySQL封包类似
fe ff ff 03 ... -- length = 2^24-2, sequence id = 3
压缩它会导致压缩包头中压缩之前的有效负载长度为
:length of mysql packet payload: 2^24-2 length of mysql packet header: 4 length of payload before compression: 2^24+2
不能在一个压缩包中表示。而是必须发送两个或更多数据包。
我不明白包是如何分割的。
整个MySQL是否被压缩,然后分开?如果是这样,如何拆分?将压缩前的有效载荷长度字段设置为什么?
或者将MySQL数据包拆分为最大大小为2 24 -1的块,然后以有效载荷长度设置为{{ 1}}除了最后一个?这似乎是两者中可能性更大的,但是我找不到有关此细节的任何文档。
最后,如果是后者,则应将最大数据包大小预压缩设置为2 24 -5,以防止出现以下情况:
ff ff ff
这里压缩并发送3个数据包,如果在MySQL数据包层以最大大小2 24 -5拆分数据包,则压缩和发送的数据包不是2个。