mysql 协议的EOF包及解析

git

https://github.com/sea-boat/mysql-protocol

概况

mysql的EOF包用于标明查询结果的结尾。

mysql通信报文结构

类型 名字 描述
int<3> payload长度 按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头
int<1> 序列号
string payload 报文体,长度即为前面指定的payload长度

EOF包

Payload

Type    Name    Description
int<1>  header  [fe] EOF header
if capabilities & CLIENT_PROTOCOL_41 {
  int<2>    warnings    number of warnings
  int<2>    status_flags    Status Flags
}

更多详情 : http://dev.mysql.com/doc/internals/en/packet-EOF_Packet.html

EOF包操作

  1. EOF包类
/**
 *
 * <pre><b>mysql eof packet.</b></pre>
 * @author
 * <pre>seaboat</pre>
 * <pre><b>email: </b>849586227@qq.com</pre>
 * <pre><b>blog: </b>http://blog.csdn.net/wangyangzhizhou</pre>
 * @version 1.0
 * @see http://dev.mysql.com/doc/internals/en/packet-EOF_Packet.html
 */
public class EOFPacket extends MySQLPacket {

    public byte header = (byte) 0xfe;
    public int warningCount;
    public int status = 2;

    @Override
    public void read(byte[] data) {
        MySQLMessage mm = new MySQLMessage(data);
        packetLength = mm.readUB3();
        packetId = mm.read();
        header = mm.read();
        warningCount = mm.readUB2();
        status = mm.readUB2();
    }

    @Override
    public void write(ByteBuffer buffer) {
        int size = calcPacketSize();
        BufferUtil.writeUB3(buffer, size);
        buffer.put(packetId);
        buffer.put(header);
        BufferUtil.writeUB2(buffer, warningCount);
        BufferUtil.writeUB2(buffer, status);
    }

    @Override
    public int calcPacketSize() {
        return 5;
    }

    @Override
    protected String getPacketInfo() {
        return "MySQL EOF Packet";
    }

}

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

时间: 2024-10-02 18:40:26

mysql 协议的EOF包及解析的相关文章

mysql 协议的query包及解析

git https://github.com/sea-boat/mysql-protocol 概况 mysql客户端可以用query包向服务端发送一个基于文本查询. mysql通信报文结构 类型 名字 描述 int<3> payload长度 按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头 int<1> 序列号 string payload 报文体,长度即为前面指定的payload长度 query包 P

mysql 协议的OK包及解析

git https://github.com/sea-boat/mysql-protocol 概况 mysql客户端与mysql服务端交互过程中,当服务端完成客户端的某命令时则会返回OK包. mysql通信报文结构 类型 名字 描述 int<3> payload长度 按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头 int<1> 序列号 string payload 报文体,长度即为前面指定的paylo

mysql 协议的ResultsetRow包及解析

git https://github.com/sea-boat/mysql-protocol 概况 ResultsetRow包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的行记录. mysql通信报文结构 类型 名字 描述 int<3> payload长度 按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头 int<1> 序列号 string payload 报文体,长度即为前面指定的

mysql 协议的认证包及解析

git https://github.com/sea-boat/mysql-protocol 概况 mysql客户端登陆到mysql服务端需要一个交互的过程,首先服务端给客户端发送的初始握手包,客户端接收到握手包后向服务端返回认证包.如下,这里分析下认证包. client server |-------connect------>| | | |<-----handshake------| | | |---authentication--->| | | mysql通信报文结构 类型 名字

mysql 协议的错误包及解析

git https://github.com/sea-boat/mysql-protocol 概况 mysql客户端与mysql服务端交互过程中,如果服务端遇到错误需要告知客户端则返回错误包. mysql通信报文结构 类型 名字 描述 int<3> payload长度 按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头 int<1> 序列号 string payload 报文体,长度即为前面指定的payl

mysql 协议的ColumnDefinition包及解析

git https://github.com/sea-boat/mysql-protocol 概况 ColumnDefinition包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的字段信息. mysql通信报文结构 类型 名字 描述 int<3> payload长度 按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头 int<1> 序列号 string payload 报文体,长度即为

mysql 协议的ColumnCount包及解析

git https://github.com/sea-boat/mysql-protocol 概况 ColumnCount包属于服务端返回ResultSet时的其中一部分包. mysql通信报文结构 类型 名字 描述 int<3> payload长度 按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头 int<1> 序列号 string payload 报文体,长度即为前面指定的payload长度 Col

MYSQL CLENT/SERVER数据包传输及net packet buffer作用解析

原创:转载请说明出处 水平有限再加上源码的复杂性,难免出现错误,请共同研究予以纠正 本文参考源码: Net_serv.cc(主要参考) Mysql.h.pp Mysql_socket.h Violite.h Viosocket.c Vio.c 参考书籍: 深入理解MYSQL核心技术 MYSQL核心内幕 internals-en MYSQL官方手册 LINUX系统编程手册 注意:    1.本文将主要解析非压缩MYSQL NET包,而尽量不考虑压缩的MYSQL NET包来减小难度    2.本文主

mixer:mysql协议分析

综述要实现一个mysql proxy,首先需要做的就是理解并实现mysql通讯协议.这样才能通过proxy架起client到server之间的桥梁. mixer的mysql协议实现主要参考mysql官方的internal manual,并用Wireshark同时进行验证.在实现的过程中,当然踩了很多坑,这里记录一下,算是对协议分析的一个总结. 需要注意的是,mixer并没有支持所有的mysql协议,譬如备份,存储过程等,主要在于精力有限,同时也为了实现简单. 数据类型mysql协议只有两种基本的