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,不同版本具体协议号有些许出入.

posted on 2017-12-11 11:16  willaty  阅读(174)  评论(0编辑  收藏  举报

导航