MySQL NET包

来源:互联网 发布:免费淘宝学习 编辑:程序博客网 时间:2024/05/20 23:30
Technorati 标签: MySQL

 

MySQL在应用层使用了一种NET协议,服务器端监听my.cnf中指定的TCP/IP端口和本地socket。客户端和服务器端的通信都是通过NET包来传送的。

在文件sql/net_serv.cc中定义了相应的API,结构体st_net封装了NET包的格式

NET包长度限制:#define MAX_PACKET_LENGTH (256L*256L*256L-1)

每个NET包包含4字节的头部信息:

3字节:数据包长度

1字节:数据包序列号

当超过数据超过NET包限制时,将会被切分成多个不超过MAX_PACKET_LENGTH的包

MySQL支持数据压缩,使用zlib(zlib/compress.c)。

//////////////////////////////////////////////////

相关函数:

my_bool my_net_init(NET *net, Vio* vio)对一个NET包进行初始化;

my_net_write(NET *net,const uchar *packet,size_t len):将包写到缓冲区中;

my_bool net_flush(NET *net):将缓冲区的数据发送出去;

my_bool net_write_command(NET *net,uchar command,const uchar *header, size_t head_len, const uchar *packet, size_t len)       向服务器端发送一条命令;

ulong my_net_read(NET *net):读取包的数据,如果这个包被分割过,还需要读取多个包来进行重组