前言:通过两个月的暑假准备秋招,9月正式开始投简历,终于在10月初敲定单位,进部门后首先学习的就是mysql的底层协议,然后就把实习的内容做一个笔记方便复习,也算是对成长的记录。
MySQL协议用于MySQL客户端和服务器直接通信
主要有以下几个实现方式:
1.连接器
2.MySQL代理
3.主从复制服务器的通信
协议支持以下功能:
SSL透明加密
compression透明压缩
连接阶段,能力和认证数据交换
命令阶段的预处理语句、存储过程的一些基础协议
-
sql/sql_parse.cc 协议基础
-
用于准备语句协议的 sql/sql_prepare.cc
-
binlog 协议的 sql/sql_repl.cc
-
用于值和类型编码的 sql/protocol.cc
1.基本数据类型(协议中的数据类型有些不同于c)
1.1整型
1.1.1固定长度整型:值(value)被储存在低位第一个字节中
例如 int<3>=1 : 01 00 00 ,侧面说明使用小端字节传输
1.1.2长度编码整型 Length-Encoded Integer Type: 由首位数字的值,决定占用1 3 4 或者9位。
1、如果首字节小于251;那么首字节就是它要表示的数值。
2、如果首字节等于251;那么它表示的就是空值。
3、如果首字节等于252;那么首字节后的2个字节用来表示数值大小。
4、如果首字节等于253;那么首字节后的3个字节用来表示数值的大小。
5、如果首字节等于254;那么首字节后的8个字节用来表示数亿的大小。
例子:
fa - 250 fc fb 00 - 251
1.2字符型
string<fix> 固定长度的字符串具有已知的硬编码长度。
string<NUL> 以 [00] 字节结尾的字符串。
string<var> 字符串的长度由另一个字段决定或在运行时计算
string<lenenc> 长度编码字符串是以描述字符串长度的长度编码整数作为前缀 的字符串。
string<EOF> 如果字符串是数据包的最后一个组成部分,则其长度可以通过数据包总长度减去当前位置来计算。
1.3描述性数据包 Describing Packets
定义每个数据包payload
并提供 example
显示每个发送的数据包来描述每个数据 包
14cfc893d3bc 9 月前
12177b210f44 9 月前