Mysql整体介绍(适用于5.X版本)(上)(标贝科技)

本文详细介绍了Mysql 5.x版本的体系结构,包括C/S通信协议、SQL执行过程。重点讲解了连接阶段的握手和认证步骤,以及请求阶段的文本协议、通用命令和预编译语句。此外,还讨论了SQL执行过程中的缓存、分析器、优化器和执行器的工作原理。
摘要由CSDN通过智能技术生成

标贝科技 https://ai.data-baker.com/#/?source=qwer12

填写邀请码fwwqgs,每日免费调用量还可以翻倍
在这里插入图片描述
在这里插入图片描述

Mysql整体介绍(适用于5.X版本)(标贝科技)

Mysql 8.X版本和 5.X版本相比,有比较大的调整。目前工作中应用最广的是Mysql 5.6/5.7的版本,所以文章将聚焦于对Mysql 5.6/5.7版本进行介绍,8.X版本的相关改动,有机会再单独整理。

一、Mysql体系结构

Mysql是一个单进程多线程、基于C/S架构的关系型数据库管理系统,其体系结构如图1所示(图片参考Mysql官方手册,各个版本会进行少许调整,总体上仍是准确的,虚线标出的查询缓存和缓冲区部分在Mysql 8.X版本中已废弃,侧面反映了数据库的查询缓存实际上比较鸡肋)。客户端是一个广义的概念,指提供连接能力的各种组件和API。服务端包括连接池、管理组件和工具类、SQL接口、解析器、优化器、缓存、插拔式存储引擎、文件系统等许多组件。

图1 Mysql体系结构
在这里插入图片描述

1.1 C/S通信协议相关内容

在服务器启动的过程中,会完成创建套接字并绑定端口等工作。然后会在handle_connections_methods()函数中完成监听,监听其实就是等待用户的连接请求。这个函数中会处理三种连接方式:命名管道、套接字及共享内存。由于大多情况下,会采用套接字的连接方式,其他连接方式只有在一定条件下才能使用,所以本文只介绍套接字相关的部分。
MySQL客户端进程和服务器进程的Connection Pool之间是基于Mysql Client/Server协议[1]进行通讯的,该协议用于连接、代理、主备复制等操作,支持 SSL、压缩等特性。
Mysql C/S协议的内涵比较丰富,它规定了连接的各个生命周期的数据格式和行为,包括:各数据类型的编码格式、各种操作的请求数据包的格式、结果返回包的格式、字符集、数据包压缩和数据包TLS加密等等。
连接的生命周期包括三部分内容:连接阶段 (Connection Phase)、请求阶段 (Command Phase) 和拷贝协议 (Replication Protocol)。其中,拷贝协议比较独立,主要用于主从节点间的binlog同步。其大体流程是:建立连接后,Client向Server发送一个MySQL binlog dump的命令,随后,Server不断地给Client发送binlog event。本文不再详细介绍,如果希望进一步了解,推荐查看go-mysql-elasticsearch作者写的这篇文章:深入解析MySQL replication协议[3]。下面我们重点介绍一下连接阶段和请求阶段。

1.1.1 连接阶段(Connection Phase)通信

1.协议数据包
先简单介绍Mysql协议的数据包(packet)[2],Mysql的数据包均由header和body两部分构成:header总共有4个字节,3个字节用来标识 payload 的大小,1个字节记录sequence ID,来保证交互时报文的顺序;body则保存实际的负载数据(payload)。
在这里插入图片描述

这是Mysql最基础的数据包结构,所有具体操作的数据包都是基于这个数据包结构进行扩展的,即不同的操作对应不同的负载数据,具体的载荷内部结构可以自行查阅官

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值