怒肝两个月MySQL源码总结出这篇2W字的MySQL协议详解
36页1、 怒肝两个月MySQL源码,总结出这篇2W字的MySQL协议详解 导读最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了。怎么办?于是乎,我便硬着头皮开始啃MySQL源码,经过两个多月的整理,终于总结出这篇MySQL协议!写在前面最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了。怎么办呢?于是乎,我便硬着头皮开始啃MySQL源码,经过两个多月的整理,终于总结出这篇MySQL协议。注:部分来自于互联网,感谢数据库大牛前辈们的默默付出!交互过程MySQL客户端与服务器的交互主要分为两个阶段:握手认证阶段和命令执行阶段。握手认证阶段握手认证阶段为客户端与服务器建立连接后进行,交互过程如下: 服务器 - 客户端:握手初始化消息 客户端 - 服务器:登陆认证消息 服务器 - 客户端:认证结果消息命令执行阶段客户端认证成功后,会进入命令执行阶段,交互过程如下: 客户端 - 服务器:执行命令消
2、息 服务器 - 客户端:命令执行结果MySQL客户端与服务器的完整交互过程如下:基本类型整型值MySQL报文中整型值分别有1、2、3、4、8字节长度,使用小字节序传输。字符串(以NULL结尾)(Null-Terminated String)字符串长度不固定,当遇到NULL(0x00)字符时结束。二进制数据(长度编码)(Length Coded Binary)数据长度不固定,长度值由数据前的1-9个字节决定,其中长度值所占的字节数不定,字节数由第1个字节决定,如下表:第一个字节值后续字节数长度值说明0-2500第一个字节值即为数据的真实长度2510空数据,数据的真实长度为零2522后续额外2个字节标识了数据的真实长度2533后续额外3个字节标识了数据的真实长度2548后续额外8个字节标识了数据的真实长度字符串(长度编码)(Length Coded String)字符串长度不固定,无NULL(0x00)结束符,编码方式与上面的 Length Coded Binary 相同。报文结构报文分为消息头和消息体两部分,其中消息头占用固定的4个字节,消息体长度由消息头中的长度字段决定,报文结构如下:
3、消息头报文长度用于标记当前请求消息的实际数据长度值,以字节为单位,占用3个字节,最大值为 0xFFFFFF,即接近 16 MB 大小(比16MB少1个字节)。序号在一次完整的请求/响应交互过程中,用于保证消息顺序的正确,每次客户端发起请求时,序号值都会从0开始计算。消息体消息体用于存放请求的内容及响应的数据,长度由消息头中的长度值决定。报文类型登陆认证交互报文握手初始化报文(服务器 - 客户端)服务协议版本号:该值由 PROTOCOL_VERSION 宏定义决定(参考MySQL源代码/include/mysql_version.h头文件定义)服务版本信息:该值为字符串,由 MYSQL_SERVER_VERSION 宏定义决定(参考MySQL源代码/include/mysql_version.h头文件定义)服务器线程ID:服务器为当前连接所创建的线程ID。挑战随机数:MySQL数据库用户认证采用的是挑战/应答的方式,服务器生成该挑战数并发送给客户端,由客户端进行处理并返回相应结果,然后服务器检查是否与预期的结果相同,从而完成用户认证的过程。服务器权能标志:用于与客户端协商通讯方式,各标志
4、位含义如下(参考MySQL源代码/include/mysql_com.h中的宏定义):标志位名称标志位说明CLIENT_LONG_PASSWORD0x0001new more secure passwordsCLIENT_FOUND_ROWS0x0002Found instead of affected rowsCLIENT_LONG_FLAG0x0004Get all column flagsCLIENT_CONNECT_WITH_DB0x0008One can specify db on connectCLIENT_NO_SCHEMA0x0010Do not allow database.table.columnCLIENT_COMPRESS0x0020Can use compression protocolCLIENT_ODBC0x0040Odbc clientCLIENT_LOCAL_FILES0x0080Can use LOAD DATA LOCALCLIENT_IGNORE_SPACE0x0100Ignore spaces before (CLIENT_PROTOCOL_4
《怒肝两个月MySQL源码总结出这篇2W字的MySQL协议详解》由会员I***分享,可在线阅读,更多相关《怒肝两个月MySQL源码总结出这篇2W字的MySQL协议详解》请在金锄头文库上搜索。
龟板生物材料的探索与利用
龟板产业的政策环境与投资机会
龟板产业的品牌塑造与市场推广
龟板产业链全产业链分析
龟板产业发展与中医现代化的关系
龟板产业可持续发展战略
龟板替代品研发与市场竞争
龟板养殖技术与产业化发展
龙齿齿轮传动承载能力影响因素分析
龙齿齿轮传动系统的故障诊断与健康管理的社会影响评估
龙齿齿轮传动系统的故障诊断与健康管理的循环经济
龟板产业的数字化转型与智能化
龙齿齿轮传动承载能力失效分析
龙齿齿轮传动系统的故障诊断与健康管理的专家系统
龟板活性成分的提取与鉴定
龟板cosmétiquesetsanté美容护肤应用
龟板提取工艺创新与优化
龙齿磨损机理与预测模型建立
龟板产业的绿色发展与环境保护
龙齿谐波传动的传动比可调技术
2023-11-30 20页
2023-06-20 5页
2023-05-26 21页
2023-04-04 5页
2023-10-05 11页
2023-11-24 2页
2023-09-07 4页
2023-01-18 2页
2023-03-17 11页
2023-08-24 5页