mysql通信协议
登录
1. 三次登录认证
- 服务器问候,服务器发送自己信息.
- 登录认证,客户端发送自己账号密码.
- 登录结果,成功则为OK包.
注意,这三次算是一次会话,包序号为1,2,3.
2. 询问详细信息
- 客户端将查询服务器详细信息.
- 服务器返回更详细的信息.
其他
基础查询
-
以下有个查询结果通用结构:
[Result Set Header] 列数量(或附加信息数量)
[Field] 列信息(多个)
[EOF] 列结束
[Row Data] 行数据(多个)
[EOF] 数据结束 -
适用命令:
select * from tb;
use xdb; // 开始的时候
show databases; // 其实是查询SCHEMATA表. -
注意: 这些包都属于一次会话,包序号连续.
OK包与ERROR包
- 当输入没有返回集合的命令时,会出现OK包,类型为0,附加一些状态信息而已.
- 当输入错误命令时,出现ERROR包,保存错误码和错误信息.
通用结构
每个包必定符合以下结构:
- 包长度(3字节)-包序号(1字节)-包类型(1字节)-包内容.
!!! 包类型并非任何时候都仅代表类型,如在基础查询结构中,代表列数量!
- 包长度是小端序,低地址保存地位.
- 包序号,每次会话从0开始,如tcp连接成功后会有登录连接(3个包).
- 包类型, 请求包和回复包不同:
请求包: 可查看/mysql/mysql_com.h有个枚举类型(如查询为3,切换数据库为2).
回复包: OK包为0,ERROR包为ff,EOF包为fe,其他为0x01-0xfa.
注意事项:
当使用use xxDb;时,会出现来回12个包的情况,不属于同一个会话,都是查询信息.
PS:
MYSQL版本5.5,不同版本具体协议号有些许出入.
【本文章出自博客园willaty,转载请注明作者出处,误差欢迎指出~】