电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

怒肝两个月MySQL源码总结出这篇2W字的MySQL协议详解

  • 资源ID:190129586       资源大小:248.48KB        全文页数:36页
  • 资源格式: DOCX        下载积分:15金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要15金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

怒肝两个月MySQL源码总结出这篇2W字的MySQL协议详解

怒肝两个月MySQL源码,总结出这篇2W字的MySQL协议详解 导读最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了。怎么办?于是乎,我便硬着头皮开始啃MySQL源码,经过两个多月的整理,终于总结出这篇MySQL协议!写在前面最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了。怎么办呢?于是乎,我便硬着头皮开始啃MySQL源码,经过两个多月的整理,终于总结出这篇MySQL协议。注:部分来自于互联网,感谢数据库大牛前辈们的默默付出!交互过程MySQL客户端与服务器的交互主要分为两个阶段:握手认证阶段和命令执行阶段。握手认证阶段握手认证阶段为客户端与服务器建立连接后进行,交互过程如下: 服务器 -> 客户端:握手初始化消息 客户端 -> 服务器:登陆认证消息 服务器 -> 客户端:认证结果消息命令执行阶段客户端认证成功后,会进入命令执行阶段,交互过程如下: 客户端 -> 服务器:执行命令消息 服务器 -> 客户端:命令执行结果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个字节,最大值为 0xFFFFFF,即接近 16 MB 大小(比16MB少1个字节)。序号在一次完整的请求/响应交互过程中,用于保证消息顺序的正确,每次客户端发起请求时,序号值都会从0开始计算。消息体消息体用于存放请求的内容及响应的数据,长度由消息头中的长度值决定。报文类型登陆认证交互报文握手初始化报文(服务器 -> 客户端)服务协议版本号:该值由 PROTOCOL_VERSION 宏定义决定(参考MySQL源代码/include/mysql_version.h头文件定义)服务版本信息:该值为字符串,由 MYSQL_SERVER_VERSION 宏定义决定(参考MySQL源代码/include/mysql_version.h头文件定义)服务器线程ID:服务器为当前连接所创建的线程ID。挑战随机数:MySQL数据库用户认证采用的是挑战/应答的方式,服务器生成该挑战数并发送给客户端,由客户端进行处理并返回相应结果,然后服务器检查是否与预期的结果相同,从而完成用户认证的过程。服务器权能标志:用于与客户端协商通讯方式,各标志位含义如下(参考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_410x0200New 4.1 protocolCLIENT_INTERACTIVE0x0400This is an interactive clientCLIENT_SSL0x0800Switch to SSL after handshakeCLIENT_IGNORE_SIGPIPE0x1000IGNORE sigpipesCLIENT_TRANSACTIONS0x2000Client knows about transactionsCLIENT_RESERVED0x4000Old flag for 4.1 protocolCLIENT_SECURE_CONNECTION0x8000New 4.1 authenticationCLIENT_MULTI_STATEMENTS0x0001 0000Enable/disable multi-stmt supportCLIENT_MULTI_RESULTS0x0002 0000Enable/disable multi-results字符编码:标识服务器所使用的字符集。服务器状态:状态值定义如下(参考MySQL源代码/include/mysql_com.h中的宏定义):状态名称状态值SERVER_STATUS_IN_TRANS0x0001SERVER_STATUS_AUTOCOMMIT0x0002SERVER_STATUS_CURSOR_EXISTS0x0040SERVER_STATUS_LAST_ROW_SENT0x0080SERVER_STATUS_DB_DROPPED0x0100SERVER_STATUS_NO_BACKSLASH_ESCAPES0x0200SERVER_STATUS_METADATA_CHANGED0x0400登陆认证报文(客户端 -> 服务器)MySQL 4.0 及之前的版本MySQL 4.1 及之后的版本客户端权能标志:用于与客户端协商通讯方式,标志位含义与握手初始化报文中的相同。客户端收到服务器发来的初始化报文后,会对服务器发送的权能标志进行修改,保留自身所支持的功能,然后将权能标返回给服务器,从而保证服务器与客户端通讯的兼容性。最大消息长度:客户端发送请求报文时所支持的最大消息长度值。字符编码:标识通讯过程中使用的字符编码,与服务器在认证初始化报文中发送的相同。用户名:客户端登陆用户的用户名称。挑战认证数据:客户端用户密码使用服务器发送的挑战随机数进行加密后,生成挑战认证数据,然后返回给服务器,用于对用户身份的认证。数据库名称:当客户端的权能标志位 CLIENT_CONNECT_WITH_DB 被置位时,该字段必须出现。客户端命令请求报文(客户端 -> 服务器)命令:用于标识当前请求消息的类型,例如切换数据库(0x02)、查询命令(0x03)等。命令值的取值范围及说明如下表(参考MySQL源代码/include/mysql_com.h头文件中的定义):类型值命令功能关联函数0x00COM_SLEEP(内部线程状态)(无)0x01COM_QUIT关闭连接mysql_close0x02COM_INIT_DB切换数据库mysql_select_db0x03COM_QUERYSQL查询请求mysql_real_query0x04COM_FIELD_LIST获取数据表字段信息mysql_list_fields0x05COM_CREATE_DB创建数据库mysql_create_db0x06COM_DROP_DB删除数据库mysql_drop_db0x07COM_REFRESH清除缓存mysql_refresh0x08COM_SHUTDOWN停止服务器mysql_shutdown0x09COM_STATISTICS获取服务器统计信息mysql_stat0x0ACOM_PROCESS_INFO获取当前连接的列表mysql_list_processes0x0BCOM_CONNECT(内部线程状态)(无)0x0CCOM_PROCESS_KILL中断某个连接mysql_kill0x0DCOM_DEBUG保存服务器调试信息mysql_dump_debug_info0x0ECOM_PING测试连通性mysql_ping0x0FCOM_TIME(内部线程状态)(无)0x10COM_DELAYED_INSERT(内部线程状态)(无)0x11COM_CHANGE_USER重新登陆(不断连接)mysql_change_user0x12COM_BINLOG_DUMP获取二进制日志信息(无)0x13COM_TABLE_DUMP获取数据表结构信息(无)0x14COM_CONNECT_OUT(内部线程状态)(无)0x15COM_REGISTER_SLAVE从服务器向主服务器进行注册(无)0x16COM_STMT_PREPARE预处理SQL语句mysql_stmt_prepare0x17COM_STMT_EXECUTE执行预处理语句mysql_stmt_execute0x18COM_STMT_SEND_LONG_DATA发送BLOB类型的数据mysql_stmt_send_long_data0x19COM_STMT_CLOSE销毁预处理语句mysql_stmt_close0x1ACOM_STMT_RESET清除预处理语句参数缓存mysql_stmt_reset0x1BCOM_SET_OPTION设置语句选项mysql_set_server_option0x1CCOM_STMT_FETCH获取预处理语句的执行结果mysql_stmt_fetch参数:内容是用户在MyS

注意事项

本文(怒肝两个月MySQL源码总结出这篇2W字的MySQL协议详解)为本站会员(I***)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.