Rumah > pangkalan data > tutorial mysql > mysql 协议的初始化DB命令包及解析

mysql 协议的初始化DB命令包及解析

黄舟
Lepaskan: 2017-03-07 13:58:52
asal
1426 orang telah melayarinya


git


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

概况

mysql连接如果想要改变该连接默认的schema,则客户端可以向服务端发送初始化DB命令包。

mysql通信报文结构

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

初始化DB命令包

Payload

1              [02] COM_INIT_DBstring[EOF]    schema name
Salin selepas log masuk

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

初始化命令包操作

  1. 初始化命令包

/**
 * 
 * @author seaboat
 * @date 2016-09-25
 * @version 1.0
 * <pre class="brush:php;toolbar:false"><b>email: </b>849586227@qq.com
*
<b>blog: </b>http://www.php.cn/;/pre>
 * <p>mysql init db packet.</p>
 */public class InitDBPacket extends MySQLPacket {
    public byte[] schema;    public void read(byte[] data) {
        MySQLMessage mm = new MySQLMessage(data);
        packetLength = mm.readUB3();
        packetId = mm.read();
        mm.read(); // skip COM_INIT_DB
        this.schema = mm.readBytes();
    }    public void write(ByteBuffer buffer) {
        BufferUtil.writeUB3(buffer, calcPacketSize());
        buffer.put(packetId);
        buffer.put(COM_INIT_DB);
        buffer.put(schema);
    }    @Override
    public int calcPacketSize() {        int i = 1;
        i += schema.length;        return i;
    }    @Override
    protected String getPacketInfo() {        return "MySQL Init DB Packet";
    }

}
Salin selepas log masuk

 以上就是mysql 协议的初始化DB命令包及解析的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan