mysql通信协议
Posted 翔云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql通信协议相关的知识,希望对你有一定的参考价值。
mysql通信报文结构
长度使用3个字节表示,最大值16MByte.
Type | Name | Description |
---|---|---|
int<3> | payload_length | payload的长度,按照the least significant byte first存储,3个字节的payload 长度和1个字节的序列号组合成报文头 |
int<1> | sequence_id | Sequence ID序列号 |
string | payload | 报文体,长度即为前面指定的payload长度 |
- payload 长度使用3个字节表示,小端字节序( the least significant byte first)。
- 序列号使用一个字节表示,新command开始时,重置为0。
Example
COM_QUIT 是client关闭连接时发送给server端的消息。
payload的第一个字节是Command。
COM_QUIT 报文格式如下:
01 00 00 00 01
- length: 1
- sequence_id: x00
- payload: 0x01
Command
client向server发送的操作命令,例如查询,插入,更新等等。
这里只列出几个常用的命令。
COM_INIT_DB
改变连接的数据库
COM_QUERY
查询操作
COM_STMT_PREPARE
creates a prepared statement from the passed query string.
COM_STMT_EXECUTE
asks the server to execute a prepared statement as identified by stmt-id.
连接阶段
client首先连接server,然后server开始握手过程。
- client connect
- server sending Initial Handshake Packet
- client replying with Handshake Response Packet
流程图如下:
c s
|----------------connect------------------->|
|<---------initial Handshake Packet---------|
|-----------Handshake Response Packet------>|
两种类型的handshake reponse packet:
Protocol::HandshakeResponse41
4.1以后版本,支持 CLIENT_PROTOCOL_41 capabilityCLIENT_PROTOCOL_41定义为0x00000200
Protocol::HandshakeResponse320
老版本
连接阶段完成:
- exchange the capabilities of client and server
- 如果需要,建立SSL 通信通道
- client到server的认证
参考
https://dev.mysql.com/doc/internals/en/client-server-protocol.html
以上是关于mysql通信协议的主要内容,如果未能解决你的问题,请参考以下文章