MySQL通信协议栈Java实现-(2)协议包格式
2016-04-15 09:35
537 查看
2. 协议包格式
MySQL client和MySQL server之间要想传输数据,必须:1. 将数据切分成若干个大小不超过
字节(16MB)的packet里面
2. 将每一个数据包封装一个包头
2.1. 数据包结构
Type | Name | Description |
---|---|---|
int<3> | payload_length | 负载数据长度,除了包头的前4字节剩余的长度 |
int<1> | sequence_id | 序列号 |
string | payload | 长度为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中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复