文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL通讯协议(2)数据包

2017-10-02 15:18

关注

MySQL通讯协议(2)数据包

由于连接的创建和释放都需要耗费资源,所以数据库这种交互频繁,且连接数量不需要特别大的应用场景,一般使用长连接。

使用短连接尚能通过RST判断数据是否读完了,而长连接就不能这么做了,同时由于TCP的特点,数据读写会发生拆包、粘包。所以使用长连接传输数据,必须通过某种方法把要发送的数据告诉接收方。例如HTTP协议head里的CONTENT-LENGTH。也可以通过特殊的符号判断,不过由于消息里可能也会出现这些符号,会发生歧义,所以应用场景受限。还有一种最简单的方法就是每次发送固定长度消息,不够用0填充。

MySQL数据包结构

Type Name Description
int<3> payload_length payload的长度,整数类型。不包括包头四个字节
int<1> sequence_id Sequence ID
string payload 有效载荷,字符串类型。长度=payload_length

消息包分为两个部分,包头+包体。

包头固定四个字节,前三个字节是整数型的payload长度,第四个是整数型的消息序列号。

包体就是这个包的有效载荷,长度由前三字节指定,内容根据具体场景各不相同。

例如,一个消息为03 00 00 01 01 02 03 04。先读取前四个字节,发现这个消息包体有3个字节,这个消息序号是0,消息内容是01 02 03,后面的04是下一个包的数据。

包体长度

由于包体长度是由三个字节记录的,三个字节能表示的最大值为FF FF FF,即1<24-1=2^24-1=16777215=15.999...M。所以,一个MySQL消息包体不能超过16MB。如果超过16MB,就分多次发送。

消息序号

消息号用来标记每个消息的顺序,会自动增长,并循环。

通用响应包

对于大多数请求,服务端有一些通用的响应包结构。

OK_Packet

命令成功完成后的响消息。

Type Name Description
int<1> header [00][fe]
int affected_rows affected rows 影响行数
int last_insert_id last insert-id 最后插住数据id
if capabilities & CLIENT_PROTOCOL_41 {
int<2> status_flags Status Flags
int<2> warnings 警告数量
} else if capabilities & CLIENT_TRANSACTIONS {
int<2> status_flags Status Flags
}
if capabilities & CLIENT_SESSION_TRACK {
string info 容易理解的状态信息
if status_flags & SERVER_SESSION_STATE_CHANGED {
string session_state_changes session state info
}
} else {
string info 容易理解的状态信息
}

header:表明这是一个OK还是EOF响应。

capabilities :在创建连接阶段,客户端和服务端交换的字段,用于表示支持哪些特性。

CLIENT_PROTOCOL_41:4.1+版本的客户端使用的协议。

ERR_Packet

Type Name Description
int<1> header [ff]
int<2> error_code 错误码
if capabilities & CLIENT_PROTOCOL_41 {
string[1] sql_state_marker # marker of the SQL State
string[5] sql_state SQL State
}
string error_message 容易理解的错误信息
阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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