您的位置:首页 > 编程语言 > Java开发

MySQL通信协议栈Java实现-(2)协议包格式

2016-04-15 09:35 537 查看

2. 协议包格式

MySQL client和MySQL server之间要想传输数据,必须:

1. 将数据切分成若干个大小不超过

字节(16MB)的packet里面

2. 将每一个数据包封装一个包头

2.1. 数据包结构

TypeNameDescription
int<3>payload_length负载数据长度,除了包头的前4字节剩余的长度
int<1>sequence_id序列号
stringpayload长度为payload_length的字符串
注意:

当传输大于16MB的数据包时,payload_length为

,并且还有其他的包包含剩余的数据,直到有一个包的数据量少于

为止。

序列号:序列号随着包增长并且可以循环利用。序列号从0开始,在MySQL command(MySQL命令)阶段时,每次有新的命令,就会有新的序列号。

2.2. 基本响应包

2.2.1. OK Packet

服务器用OK Packet来告诉客户端一条命令执行成功了。在MySQL5.7.5中,OK Packet用来标识EOF,EOF Packet废弃不用了。

结构:

1. header:int<1> ,包头:内容为[00]或者[fe]

2. affected_rows: int<lenec>, 命令影响的记录数

3. last_insert_id:int<lenec>,上一次插入的id

如果capabilities & CLIENT_PROTOCOL_41为真 {

4. status_flags:int<2>,状态位

5. warnings:int<2>,waring个数

}或者如果capabilities & CLIENT_TRANSACTIONS为真

4. status_flags:int<2>,状态位

}

如果capabilities & CLIENT_SESSION_TRACK为真{

6. info:string<lenec>,状态信息解释

如果status_flags & SERVER_SESSION_STATE_CHANGED 为真{

7. session_state_changes:string<lenec>,会话状态信息

}

} else {

6. info:string<EOF>,状态信息解释

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 通信 协议栈