怒肝四个月MySQL源码,我总结出这篇MySQL协议(详尽版)!!

功能:要求服务器将调试信息保存下来,保存的信息多少依赖于编译选项设置(debug=no|yes|full)。执行mysqladmin debug命令时发送该消息,无参数。

COM_PING 消息报文

功能:该消息用来测试连通性,同时会将服务器的无效连接(超时)计数器清零。执行mysqladmin ping命令时发送该消息,无参数。

COM_CHANGE_USER 消息报文

功能:在不断连接的情况下重新登陆,该操作会销毁MySQL服务器端的会话上下文(包括临时表、会话变量等)。有些连接池用这种方法实现清除会话上下文。

| 字节 | 说明 |

| — | — |

| n | 用户名(字符串以NULL结尾) |

| n | 密码(挑战数) |

| | MySQL 3.23 版本:Null-Terminated String(长度9字节) |

| | MySQL 4.1 版本:Length Coded String(长度1+21字节) |

| n | 数据库名称(Null-Terminated String) |

| 2 | 字符编码 |

COM_BINLOG_DUMP 消息报文

功能:该消息是备份连接时由从服务器向主服务器发送的最后一个请求,主服务器收到后,会响应一系列的报文,每个报文都包含一个二进制日志事件。如果主服务器出现故障时,会发送一个EOF报文。

| 字节 | 说明 |

| — | — |

| 4 | 二进制日志数据的起始位置(小字节序) |

| 4 | 二进制日志数据标志位(目前未使用,永远为0x00) |

| 4 | 从服务器的服务器ID值(小字节序) |

| n | 二进制日志的文件名称(可选,默认值为主服务器上第一个有效的文件名) |

COM_TABLE_DUMP 消息报文

功能:将数据表从主服务器复制到从服务器中,执行SQL语句LOAD TABLE ... FROM MASTER时发送该消息。目前该消息已过时,不再使用。

| 字节 | 说明 |

| — | — |

| n | 数据库名称(Length Coded String) |

| n | 数据表名称(Length Coded String) |

COM_REGISTER_SLAVE 消息报文

功能:在从服务器report_host变量设置的情况下,当备份连接时向主服务器发送的注册消息。

| 字节 | 说明 |

| — | — |

| 4 | 从服务器ID值(小字节序) |

| n | 主服务器IP地址(Length Coded String) |

| n | 主服务器用户名(Length Coded String) |

| n | 主服务器密码(Length Coded String) |

| 2 | 主服务器端口号 |

| 4 | 安全备份级别(由MySQL服务器rpl_recovery_rank变量设置,暂时未使用) |

| 4 | 主服务器ID值(值恒为0x00) |

COM_PREPARE 消息报文

功能:预处理SQL语句,使用带有"?"占位符的SQL语句时发送该消息。

| 字节 | 说明 |

| — | — |

| n | 带有"?"占位符的SQL语句(字符串到达消息尾部时结束,无结束符) |

COM_EXECUTE 消息报文

功能:执行预处理语句。

| 字节 | 说明 |

| — | — |

| 4 | 预处理语句的ID值 |

| 1 | 标志位 |

| | 0x00: CURSOR_TYPE_NO_CURSOR |

| | 0x01: CURSOR_TYPE_READ_ONLY |

| | 0x02: CURSOR_TYPE_FOR_UPDATE |

| | 0x04: CURSOR_TYPE_SCROLLABLE |

| 4 | 保留(值恒为0x01) |

| 如果参数数量大于0 | |

| n | 空位图(Null-Bitmap,长度 = (参数数量 + 7) / 8 字节) |

| 1 | 参数分隔标志 |

| 如果参数分隔标志值为1 | |

| n | 每个参数的类型值(长度 = 参数数量 * 2 字节) |

| n | 每个参数的值 |

COM_LONG_DATA 消息报文

该消息报文有两种形式,一种用于发送二进制数据,另一种用于发送文本数据。

功能:用于发送二进制(BLOB)类型的数据(调用mysql_stmt_send_long_data函数)。

| 字节 | 说明 |

| — | — |

| 4 | 预处理语句的ID值(小字节序) |

| 2 | 参数序号(小字节序) |

| n | 数据负载(数据到达消息尾部时结束,无结束符) |

功能:用于发送超长字符串类型的数据(调用mysql_send_long_data函数)

| 字节 | 说明 |

| — | — |

| 4 | 预处理语句的ID值(小字节序) |

| 2 | 参数序号(小字节序) |

| 2 | 数据类型(未使用) |

| n | 数据负载(数据到达消息尾部时结束,无结束符) |

COM_CLOSE_STMT 消息报文

功能:销毁预处理语句。

| 字节 | 说明 |

| — | — |

| 4 | 预处理语句的ID值(小字节序) |

COM_RESET_STMT 消息报文

功能:将预处理语句的参数缓存清空。多数情况和COM_LONG_DATA一起使用。

| 字节 | 说明 |

| — | — |

| 4 | 预处理语句的ID值(小字节序) |

COM_SET_OPTION 消息报文

功能:设置语句选项,选项值为/include/mysql_com.h头文件中定义的enum_mysql_set_option枚举类型:

  • MYSQL_OPTION_MULTI_STATEMENTS_ON

  • MYSQL_OPTION_MULTI_STATEMENTS_OFF

| 字节 | 说明 |

| — | — |

| 2 | 选项值(小字节序) |

COM_FETCH_STMT 消息报文

功能:获取预处理语句的执行结果(一次可以获取多行数据)。

| 字节 | 说明 |

| — | — |

| 4 | 预处理语句的ID值(小字节序) |

| 4 | 数据的行数(小字节序) |

服务器响应报文(服务器 -> 客户端)

当客户端发起认证请求或命令请求后,服务器会返回相应的执行结果给客户端。客户端在收到响应报文后,需要首先检查第1个字节的值,来区分响应报文的类型。

| 响应报文类型 | 第1个字节取值范围 |

| — | — |

| OK 响应报文 | 0x00 |

| Error 响应报文 | 0xFF |

| Result Set 报文 | 0x01 - 0xFA |

| Fiel

  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值