1 交互过程MySQL客户端与服务器的交互主要分为两个阶段: 握手认证阶段和命令执行阶段。1.1 握手认证阶段握手认证阶段为客户端与服务器建立连接后进行,交互过程如下:服务器 -> 客户端:握手初始化消息客户端 -> 服务器:登陆认证消息服务器 -> 客户端:认证结果消息1.2 命令执行阶段客户端认证成功后,会进入命令执行阶段,交互过程如下:客户端 -> 服务器:执行命令消
转载 2023-09-07 18:22:21
311阅读
本来看MySQL协议是要做一个skynet的lua c库的,今天群里有人实现了,主要是根据openresty/lua-resty-mysql改的,之前工作老停留在协议内容上,不过也好,充分学些了一些MySQL协议。同时这个项目也值得关注OpenResty。一次正常的过程如下三次握手建立tcp连接建立MySql连接a) 服务端往客户端发送握手初始化包(Handshake Init
最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了。怎么办呢?于是乎,我便硬着头皮开始啃MySQL源码,经过两个多月的整理,终于总结出这篇MySQL协议。注:部分来自于互联网,感谢数据库大牛前辈们的默默付出!!交互过程MySQL客户端与服务器的交互主要分为两个阶段:握手认证阶段和命令执行阶段。握
 MySQL 通信协议介绍 1、数据类型了解MySQL协议包之前必需先知道其数据类型  1.1 Integer Types 整数类型(1)定长整型固定长度, 小端编码, 有下面几种(括号内的代表所占字节数):int<1>int<2>int<3>int<4>int<6>int<8>&nbs
mysql起始握手,先由server发起,client分析并回应自已同意的特性,然后双方依照这些特性处理数据包。通信时是否采用压缩会改变数据包的字节变化。客户端的特性在首个回应(既握手包)服务器中体现,如:是否开启压缩、字符集、用户登录信息等。1.未采用压缩时,客户端向服务器发送的包格式:格式:3*byte,1*byte,1*byte,n*byte表示:消息长度,包序号,请求类型,请求内容2.采用
MySQL协议分析,主要参考MySQL Forge上的 wiki和源码.协议的全图见 这里, 给同事分享的ppt见 这里,下载见 这里packet number在做proxy的时候在这里迷糊过,翻了几遍代码才搞明白,细节如下:客户端服务端的net->pkt_nr都从0开始.接受包时比较packet number 和net->pkt_nr是否相等,否则报packet number乱序,连
转载 2023-08-28 14:39:01
175阅读
MySQL流程 1:MySQL流程图 2:MySQL的流程分析 1.连接    1.1客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求   1.2将请求转发到‘连接进/线程模块’   1.3调用‘用户模块’来进行授权检查   1.4通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果
转载 2023-08-20 20:11:49
127阅读
Mysql07-MySQL深入学习总结          索引的本质及索引的数据结构     b树结构详细     myslam存储引擎索引     inodb存储引擎索引     mysql索引优化与底层数据结构深入
转载 2023-09-07 18:59:34
100阅读
JDBC连接过程: import java.sql.*; /** * Description: * Created by CWG on 2020/10/29 21:05 */ public class ConnectionTest { public static void main(String[] args){ String user = "root";
# 解析MySQL协议的流程 ## 流程图 ```mermaid flowchart TD A[建立与MySQL服务器的连接] --> B[发送握手协议] B --> C[接收握手响应] C --> D[发送身份认证请求] D --> E[接收身份认证响应] E --> F[发送命令请求] F --> G[接收命令响应] ``` ## 步骤及代
原创 2023-12-02 09:42:30
80阅读
GORM快速入门教程 1.概述GORM是Golang目前比较热门的数据库ORM操作库,对开发者也比较友好,使用非常方便简单,使用上主要就是把struct类型和数据库表记录进行映射,操作数据库的时候不需要直接手写Sql代码,这里主要介绍MySQL数据库。GORM库github地址: https://github.com/go-gorm/gorm2.简单例子我们先看个简单的例子了解下GORM
 假设有如下表定义及数据:CREATE TABLE `t3` ( `id` int NOT NULL, `a` int DEFAULT NULL, `b` int DEFAULT NULL, PRIMARY KEY (`id`), KEY `a` (`a`) ) ENGINE=InnoDB; delimiter ;; create procedure idata(
本文目录解析原则TLS报文识别和重组HTTP2报文识别和重组解析例子 解析原则当程序面对一堆字节流,解析会严格按照协议约定的字段进行识别,按照报文中给出的长度切分字节流。 在OSI七层模型中,对于传输层以下的协议解析都比较简单,以链路层为以太网帧为例:读取前14字节的以太网帧首部,从第13和14字节获取网络层协议类型,如IPv4采用1.中获取的网络层协议格式,从第15字节开始按照IPv4的首部格
转载 2024-09-13 20:13:26
618阅读
一、Netty 简介Netty 是基于 Java NIO 的异步事件驱动的网络应用框架,使用 Netty 可以快速开发网络应用,Netty 提供了高层次的抽象来简化 TCP 和 UDP 服务器的编程,但是你仍然可以使用底层的 API。Netty 的内部实现是很复杂的,但是 Netty 提供了简单易用的API从网络处理代码中解耦业务逻辑。Netty 是完全基于 NIO 实现的,所以整个 Netty
开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢?答案是否定的。开源运动同样有自己的游戏规则和道德准则。不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成名誉和市场上的损失,更可能陷入法律纠纷和赔偿。首先,要对几个概念有所了解:1.         Contributors 和
转载 2023-12-04 23:57:38
35阅读
脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。会导致丢失修改MySQL实现了四种通信协议,包括TCP/IP,Socket,共享内存,命名管道1.    TCP/IP协议,通常我们通过来连接MySQL,各种主要编程语言都是根据这个协议实现了连接
转载 2023-08-14 23:00:43
178阅读
为什么突然想起来要研究它了呢?是因为想用MySQL做点东西,但是发现它的客户端库,也就是MySql Connector/Net,是使用GPL授权的,换句话说,不可以闭源分发。听说MariaDB使用完全相同的通讯协议,所以它的客户端库可以兼容MySQL,它倒是LGPL的,不过没有.Net的版本,天啊,不带这么欺负.Net的。 于是乎,萌生了自己写connector的想法(能不能写得出来先不管),所以
当 SQL 通过上一篇所描述的路径来到这里, dispatch 这个函数如它的名字一样,对不同类型的 SQL 语句 case 到不同的函数中,那咱们来看看这个函数吧,在这里:server/conn.go大致如下的流程t := time.Now()复制代码记录时间戳 t ,记录的大概是 SQL 开始执行的时间戳。cc.lastPacket = datacmd := data[0]data = dat
概述最近一段时间重新深入研究了一遍MySQL的内容,今天主要分享分析MySQL索引原理,后续会输出一些关于MySQL方面的干货,希望各位小伙伴喜欢。一、什么是索引、为什么要建立索引?关于索引的理解,个人更加喜欢将其比喻为字典里面的目录,根据字典来进行查询的速度远大于每一页逐个逐个字排查的速度。索引主要用于快速找出在某个列中有特定值的行,倘若不使用索引,MySQL必须从第一条记录开始读完整个表,直到
我们就针对上图中所抓的这个包来进行分析。1.“tcpdump: verbose output suppressed, use -v or -vv for full protocol decode”这是说你命令没有用到-v和-vv,如果你用了这两个选项,输出就会有更多内容。2.“listening on eth0, link-type EN10MB (Ethernet), capture size
  • 1
  • 2
  • 3
  • 4
  • 5