文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mysql 报文格式

2016-03-30 17:28

关注


	Mysql 报文格式
[数据库教程]

mysql client和server端之间的的数据根据不同的协议规则的进行组织发送。每包数据在发送的时候都要添加上协议头。

mysql源码采用5.7.10版本:

协议头:
           每个协议头共4个字节

          包数据长度:

              前三个字节表示数据部分的长度(不包括协议头),三字节能表示的最大长度是16M-1(2^24 - 1),如果要发送的数据部分大于这个长度,要进行拆包,每16M-1个长度为一包。接收端在接受数据的时候,如果检测到包的长度是16M-1,说明后续还有数据部分,直到接收到<16M-1长度的数据包结束。这意味着最后一包的数据长度可能为0.

         序号:

                1个字节,从0开始递增。当发送一个新的sql、数据库重连,该值清0(函数sql/Net_serv.cc : net_clear).

数据类型:
         除了固定长度的整型或者字符串之外,还有其他几种类型的数据。(固定长度字段数据的存取:include/Mybyte_order.h : 存值 int*store   取值:int*korr    多字节的处理按照小端优先的方式)

         1. 可变长度的整数   

            对该类数据的存取在函数:sql-common/Pack.c: 存整数: net_store_length     读整数:net_field_length

            如果数值<251,直接用一个字节存储这个值。

           如果251<=数值<2^16, 采用3个字节存储,第一个字节是252, 另外2个字节存储整数内容

           如果2^16<=数值<2^24,采用4字节存储,第一个字节是252,另外3个字节存储整数内容

           如果2^24<=数值<2^64,采用9字节存储,第一个字节255,另外8字节存储整数内容

           如果第一个字节为251,表示该整数字段为null

           如果第一个字节为255,表示该字节是ERR包的第一个字节

       2. 可编码长度的字符串

               字符串的长度采用可变长度的整数进行编码。

数据长度不固定,长度值由数据前的1-9个字节决定,其中长度值所占的字节数不定,字节数由第1个字节决定,如下表:

第一个字节值后续字节数长度值说明
0-250 0 第一个字节值即为数据的真实长度
251 0 空数据,数据的真实长度为零
252 2 后续额外2个字节标识了数据的真实长度
253 3 后续额外3个字节标识了数据的真实长度
254 8 后续额外8个字节标识了数据的真实长度

       3. null结尾的字符串

服务器响应包:
          服务器响应包分为4类: OK包  ERR包    EOF包    数据包

          OK包:在5.7.5之前,ok包首字节为0,;在5.7.5之后,ok包的首字节可能为0xFE,表示EOF。

                              该包包括成功执行后影响的行数,最新的自增id, 告警信息(4.1版本之上),服务器状态信息:status_flag(该字段要留意,后续后讲到)

                           执行函数:sql/protocol_classic.cc :   net_send_ok

                   由于协议的内容容易变更,建议查看官网的最新版格式:https://dev.mysql.com/doc/internals/en/packet-OK_Packet.html

          ERR包:首字节是255,报错错误码和错误的描述信息。4.1版本之上包括错误状态。

                          执行函数:sql/protocol_classic.cc :   net_send_error_packet

                          具体包格式:https://dev.mysql.com/doc/internals/en/packet-ERR_Packet.html

          EOF包:首字节254,包括服务器状态和告警数量(4.1版本之上)

                          执行函数:sql/protocol_classic.cc :   net_send_eof

                          具体包格式:https://dev.mysql.com/doc/internals/en/packet-EOF_Packet.html

          数据包:和具体的协议类型有关,后续讲解

 

Mysql 报文格式

原文地址:https://www.cnblogs.com/songhaibin/p/13725598.html

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯