用C++解析MYSQL客户端服务器通信协议

         MYSQL是一个开源数据库,它自定义了一套客户端和服务器之间的底层通信协议,默认使用TCP 3306端口通信。

        根据MYSQL客户端和服务器的通信协议规范定义,MYSQL通信协议的报文包括建立连接的服务端握手报文、客户端握手应答、客户端执行查询等操作命令报文以及服务端的相应的应答报文。协议文档官网地址如下:

官方在线文档https://dev.mysql.com/doc/internals/en/client-server-protocol.html        MYSQL报文结构如下图所示,其中的payload字段是每一种报文的载荷,每一种报文的载荷编码结构在官方在线文档中有详细说明。

        建立连接的握手请求报文包括HandshakeV10和HandsharkV9。命令报文由命令等字段组成,命令字段标识了命令报文类型,命令可选值如下表所示:

命令

常量名称

说明

0x00

COM_SLEEP

仅服务器内部使用

0x01

COM_QUIT

客户端关闭连接

0x02

COM_INIT_DB

修改连接的默认数据库

0x03

COM_QUERY

请求执行一个查询语句

0x04

COM_FIELD_LIST

获取表格的所有字段名

0x05

COM_CREATE_DB

创建数据库

0x06

COM_DROP_DB

删除数据库

0x07

COM_REFRESH

执行REFRESH或者FLUSH命令

0x08

COM_SHUTDOWN

关闭服务器

0x09

COM_STATICTICS

获取线程信息

0x0a

COM_PROCESS_INFO

获取线程信息

0x0b

COM_CONNECT

仅服务器内部使用

0x0c

COM_PROCESS_KILL

请求中断连接

0x0d

COM_DEBUG

导出调试信息到标准输出

0x0e

COM_PING

检查服务端是否存活

0x0f

COM_TIME

仅服务器内部使用

0x10

COM_DELAYED_INSERT

仅服务器内部使用

0x11

COM_CHANGE_USER

修改当前连接的用户

0x12

COM_BINGLOG_DUMP

导出BINLOG

0x13

COM_TABLE_DUMP

导出表

0x14

COM_CONNECT_OUT

仅服务器内部使用

0x15

COM_REGISTER_SLAVE

注册从节点到主节点

0x16

COM_STMT_PREPARE

创建预编译语句

0x17

COM_STMT_EXECUTE

执行预编译语句

0x18

COM_STMT_SEND_LONG_DATA

发送预编译列数据

0x19

COM_STMT_CLOSE

关闭预编译语句

0x1a

COM_STMT_RESET

重置预编译语句的数据

0x1b

COM_SET_OPTION

开启或关闭CLIENT_MULTI_STATEMENTS

0x1c

COM_STMT_FETCH

从结果集中取数据

0x1d

COM_DAEMON

仅服务器内部使用

0x1e

COM_BINLOG_DUMP_GTID

请求一个BINLOG网络流

0x1f

COM_RESET_CONNECTION

重置会话状态

0xef

Semi-Synchronous

半同步复制

0xfb

LOCAL_INFILE_Request

加载本地数据文件到服务器

        应答报文包括OK_Packet、ERR_Packet等通用的应答,以及特定命令的数据应答如HandshakeResponse41、HandshakeResponse320等,如下表所示:

类型

说明

OK_Packet

命令执行成功

ERR_Packet

出现异常

EOF_Packet

同OK_Packet,MySQL 5.7.5开始取消此报文

HandshakeResponse41

客户端握手报文应答(双方支持CLIENT_PROTOCOL_41)

HandshakeResponse320

客户端握手报文应答(不支持CLIENT_PROTOCOL_41)

ColmunDefinition41

查询等操作应答(双方支持CLIENT_PROTOCOL_41)

ColmunDefinition320

查询等操作应答(不支持CLIENT_PROTOCOL_41)

COM_STMT_PREPARE_OK

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值