在MySQL客户端/服务器协议中,压缩数据包如何拆分?

时间:2019-07-07 06:30:15

标签: mysql mysql-connector network-protocols mysqlconnection

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个。

0 个答案:

没有答案