Packet基本构成

  • Packet不能超过16M(224-1 byte,0xffffff),如果超过了会拆成多个Packet发送
  • Packet头部都必须携带Header信息

Packet拆解

  • Header信息由4个字节组成,前3字节代表mysql包长度(payload_length),第4字节表示包序号(sequence_id)
  • 从第5个字节开始表示mysql包内容(payload),具体长度由payload_length决定

举个例子,Packet用字节数组表示:49 1 0 0 2 50 22…………

  • payload_length = 305
  • sequence_id = 0

payload_length 计算逻辑如下:

 byte[] buf= new byte[3];buf[0] = 49;buf[1] = 1;buf[2] = 0;payload_length  = (0xff & buf[position]) | ((0xff & buf[position + 1]) << 8) | ((0xff & buf[position + 2]) << 16);

mysql包大小超过16M的情况

前面讲过payload大小必须<= 224-1(FF FF FF), 假设现有payload大小等于224,那么会被拆成2次发送:
FF FF FF
00 00 01

sequence_id 说明

sequence_id表示一个完整流程的包序号,从0开始,当有拆包或者回复包都会往上+1。新的流程会重新从0开始。

Client发送的命令类型

命令类型由第5个字节表示:


命令类型具体有哪几种,可以参考官方文档:https://dev.mysql.com/doc/internals/en/command-phase.html

Server返回给Client的Packet格式

Server返回的Packet有3种类型:OK_Packet、ERR_Packet、EOF_Packet

  • OK_Packet:表示Client发送的命令执行成功,第1个字节值等于 00
  • ERR_Packet:表示发生异常,第1个字节值等于 FF
  • EOF_Packet:在MySQL 5.7.5版本弃用了,作用和OK_Packet类似,第1个字节值等于 FE,可以不用管。

MySQL协议包说明相关推荐

  1. mysql认证包_mysql协议分析2---认证包

    主人看到navicat和mysql在那嘻嘻哈哈,眉来眼去的,好不快乐,忽然也想自己写个程序,直接去访问Mysql,虽然现在已经有很多现成的中间件可以直接拿来用了,程序只要负责写sql语句就行了,但是主 ...

  2. mysql eof_详细介绍mysql 协议的EOF包及解析

    git https://github.com/sea-boat/mysql-protocol 概况 mysql的EOF包用于标明查询结果的结尾. mysql通信报文结构类型名字描述int<3&g ...

  3. mysql 协议说明_MySQL认证协议_MySQL

    本文是针对MySQL 5.5.9写的.MySQL协议是向老版本兼容的.老版本的MySQL Client可能不理解下面的某些字段而忽略掉. 实际使用的时候,服务器的协议版本应当大于等于客户端.遗憾的是, ...

  4. 怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!

    写在前面 最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了.怎么办呢?于是乎,我便硬着头皮开始 ...

  5. MySQL抓包工具:MySQL Sniffer

    简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端的请求,并格式化输出.输出内容包访问括时间.访问用户.来源 IP.访问 Database. ...

  6. MySQL协议.NET Core实现(一)

    转载文章,原文作者:徐应庭 dotNET跨平台 一个有技术追求的研发团对,无论使用什么框架.什么工具.什么语言,团队里应该有人有能力把控所使用框架.工具.语言的每一个核心功能的实现细节.团队里的每个成 ...

  7. MySQL抓包工具:MySQL Sniffer【转】

    本文来自:https://github.com/Qihoo360/mysql-sniffer 简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer ...

  8. mysql long类型_怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!...

    点击上方蓝色"冰河技术",关注并选择"设为星标" 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架 ...

  9. mysql抓包_mysql抓包工具

    简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端或 Client 端请求,并格式化输出.输出内容包括访问时间.访问用户.来源 IP.访问 ...

最新文章

  1. 【错误记录】Android 编译时技术报错 ( 注解处理器 process 方法多次调用问题 )
  2. 《重构:改善既有代码的设计》-学习笔记一(+实战解析)
  3. Axure tabstrip and different control
  4. 深搜DFS\广搜BFS 图初步入门
  5. 测试两个主机之间的连通性_常用的光缆4种测试方法介绍
  6. 计算机显微视觉相关概念,机器视觉的概念及常见应用
  7. mysql利用init-connect增加访问审计功能的实现
  8. iOS底层探索之类的结构(下):objc_setProperty
  9. (四)通用定时器的定时功能(使用中断)
  10. GPS开发、定位修改
  11. Linux学习第一周作业。
  12. 利用SpringBoot返回一个json对象
  13. Flink滚动窗口函数的开窗起始时间计算规则
  14. RabbitMQ深入学习指导
  15. 皮卡丘忠实粉丝之Web实现操作系统实验(进程调度+存储管理+死锁避免银行家算法)
  16. 建造一个自平衡机器人
  17. oracle查询substr,oracle 查询优化select count(*),sum(bal) from rpt_xd where substr
  18. 施耐德开放自动化平台初体验(1)
  19. 免费!!!亚马逊销量数据下载助手软件
  20. java计算机毕业设计社区物业管理系统源码+系统+数据库+lw文档

热门文章

  1. Web Dynpro ABAP---ALV控件的使用
  2. 如何配note,打补丁
  3. ABAP TC 响应双击事件
  4. 调试Excel VBA代码
  5. 猫眼娱乐2020年上半年交出最差答卷,下半年能满血复活吗?
  6. java的外部引用_Java 调用外部程序
  7. java 自助更改密码 api_搭建ldap自助修改密码系统--Self Service Password
  8. iphone屏幕镜像如何全屏_苹果系统截屏录屏+标记剪辑功能详解( iPhone/iPad/Mac)
  9. python内置函数map reduce filter详解,面试必备知识
  10. Python基础教程:函数的可变参数