MYSQL架构、执行过程和顺序

MYSQL架构、执行过程和顺序

一、前言

1.1、说明

就MySQL的架构,以及执行过程、sql执行顺序,以及一些相关学习分享内容。

在参考文章的基础上,会增加自己的理解、看法,希望本文章能够在您的学习中提供帮助。

如有错误的地方,欢迎指出纠错,互相学习,共同进步。

1.2、参考文章&视频

十分感谢文章在学习过程中提供的帮助

article:

  • https://www.cnblogs.com/wyq178/p/11576065.html

  • https://juejin.cn/post/7002604517913001997

  • https://blog.csdn.net/qq_48157004/article/details/128590851

  • https://cloud.tencent.com/developer/article/1882003

  • https://cloud.tencent.com/developer/article/1115019

  • https://www.cnblogs.com/ydyxcode/p/17918605.html

  • jdbc

vedio:

  • 尚硅谷-MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板:p109

二、MySQL逻辑结构

2.1、MySQL数据库架构主要层次

MySQL采用客户端-服务端(CS)架构,结构可以分为如下层

  • 客户端(Connectors):用户与数据库进行交互的部分,可以是命令行工具、图形用户界面(GUI)工具或应用程序。客户端通过网络与服务器通信,发送SQL查询并接收结果。

    在这里插入图片描述

    JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的 Java API,是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够交给数据库执行SQL语句。具体的实现通常由不同的数据库厂商提供,每个厂商会根据JDBC规范实现自己的驱动程序。常见的JDBC驱动实现包括:

    1. Oracle JDBC Driver:用于连接Oracle数据库的驱动程序。
    2. MySQL Connector/J:MySQL数据库的官方JDBC驱动。
    3. PostgreSQL JDBC Driver:用于连接PostgreSQL数据库的驱动。
    4. Microsoft JDBC Driver for SQL Server:用于连接SQL Server的驱动。

    相关jdbc内容参考文章

  • 服务端:MySQL服务器负责处理客户端请求,执行SQL语句,并返回结果。它包括多个模块,如解析器、优化器、执行引擎等。

    • 连接层:系统(客户端)访问MySQL服务器前,做的第一件事就是建立TCP连接。经过三次握手建立连接成功后,MySQL服务器对TCP传输过来的账号密码做身份认证、权限获取。
    • 服务层:接收用户的SQL命令、解析器中对 SQL 语句进行语法分析、语义分析,以及SQL优化等。
    • 引擎层:属于MySQL服务端的组成部分。位于服务端的架构中,负责实际的数据存储、读取和管理。每个存储引擎具有不同的功能和特性,例如事务支持、表锁或行锁、外键支持等。MySQL支持多种存储引擎(如InnoDB、MyISAM等),每种存储引擎有不同的特性和性能表现。选择合适的存储引擎可以根据应用需求来优化性能和功能。
  • 存储层:所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在文件系统上,以文件的方式存

    在的,并完成与存储引擎的交互。当然有些存储引擎比如InnoDB,也支持不使用文件系统直接管理裸设
    备,但现代文件系统的实现使得这样做没有必要了。在文件系统之下,可以使用本地磁盘,可以使用
    DAS、NAS、SAN等各种存储系统。

2.2、MySQL数据库架构图

架构图(具体详情分析可见2.3部分):

在这里插入图片描述

架构图2
在这里插入图片描述

对存储引擎描述比较详细的一张架构图(可用于参考,本文章的侧重点不在存储引擎,不同的存储引擎内部实现不同)

在这里插入图片描述

比较官方的一张架构图

在这里插入图片描述

内容详解:

  • Connetors:用于连接和与MySQL数据库进行交互的驱动程序或库(由MySQL官方开发和维护),是MySQL服务器之外的客户端程序,与具体语言相关
  • Connection Pool:连接池,提供多个客户端与服务器端交互的线程
  • Management Services & Utilitiees:基础服务组件
  • SQL Interface:SQL接口,接受SQL指令,返回查询结果
  • Parser:解析器,用于语法解析,语义解析,生成语法树
  • Optimizer:优化器,核心组件,对SQL进行优化
  • Caches & Buffers:查询缓存,以key-value的方式缓存查询结果(mysql8.0移除)
  • Pluggable Storage Engines:插件式存储引擎,与底层的文件系统进行交互
  • File system:文件系统
  • Files & Logs:日志文件

执行顺序:

  • 客户端需要查询一条数据

  • 客户端通过Connetors向客户端发起链接

  • 服务端通过Connection pool接受链接,并分配一个线程用于执行后续内容

  • SQL Interface

  • Caches & Buffers(5.7):查询缓存

  • Parser

  • Optimizer

  • Pluggable Storage Engines

  • File system:需要从磁盘中加载到内存中,进行处理

  • Caches & Buffers(5.7):缓存查询结果

各层内容:

  • 客户端:Connetors
  • 连接层:Connection Pool
  • 服务层:SQL Interface、Parser、Optimizer、Caches & Buffers
  • 引擎层:Pluggable Storage Engines
  • 存储层:File system

2.3、架构剖析

1. Connetors

用于连接和与MySQL数据库进行交互的驱动程序或库(由MySQL官方开发和维护),是MySQL服务器之外的客户端程序,与具体语言相关

2. 连接层

系统(客户端)访问MySQL服务器前,做的第一件事就是建立TCP连接。

  • 建立和维护连接

连接器负责与客户端的通信,其使用的是半双工模式(一种通信方式,其中通信双方可以交替地发送和接收数据,但不能同时进行发送和接收)。首先是与访问的客户端建立TCP连接,服务器有专门的TCP连接池,采用长连接模式复用TCP连接,经过三次握手建立连接成功后,之后会对TCP传输过来的账号密码做身份认证、权限获取。在服务器内部,每个client连接都有自己的线程,即TCP连接都会分配给一个线程去执行后续的流程。这些线程轮流运行在某一个CPU内核(多核CPU)或者CPU中,缓存了线程(线程池),因此不需要为每个client连接单独创建和销毁线程 ,省去了创建和销毁线程的开销。

  • 认证和权限获取

完成与访问客户端的TCP连接后,会对TCP传递过来的账号密码进行身份认证。

如果账户和密码错误,会报错Access denied for user 'root'@'localhost' (u

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值