MySQL-逻辑架构

1、MySQL服务器处理客户端请求

  • MySQL是典型的C/S架构,服务端程序使用 mysqld。
  • 实现效果:客户端进程像服务端发送(SQL语句),服务器进程处理后再像客户端进程发送 处理结果。

2、connectors

  • 指不同语言中与SQL的交互
  • MySQL是一个网络程序,再TCP上定义了自己的应用层协议,编写相关代码与MySQL server建立TCP连接
  • 通过调用SDK(本质是再TCP连接上通过MySQL协议进行交互),即不同语言的MySQL Connector,或者ODBC

3、连接层

客户端访问MySQL服务器之前,会先建立TCP连接,经过三次握手连接成功后,MySQL服务器对TCP传输过来的信息做身份认证及权限获取

  • 用户或密码不正确,会收到 Access denied for user 错误,客户端程序结束执行
  • 认证通过,会从权限表获取账号拥有的权限与连接关联,之后的权限判断逻辑都依赖与此时读取到的相关权限
  • MySQL服务器有专门的 TCP连接池 限制连接数,采用 长连接模式 复用TCP连接

4、服务层

在该层服务器会 解析查询 并创建相应的内部 解析树,并完成相应的 优化,如确定查询顺序,是否使用索引等。如果是select语句,会 查询内部缓存

  • SQL Interface:SQL接口
    ①接受用户SQL命令并返回用户需要查询的结果。
    ②支持DML,DDL、存储过程、视图、触发器、自定义函数等SQL语言接口
  • Parser:解析器
    ①在解析器中对SQL语句进行语法分析、语义分析,并将SQL语句分解成 数据结构,将该数据结构传递到后续步骤,后续的传递和处理都基于该 数据结构
    ②SQL语句传递到解析器的时候会被解析器验证和解析,并创建 语法树,然后更具数据字典丰富查询语法树,会 验证该客户端是否具有执行的权限。
    ③创建语法树后,MySQL会对SQL查询进行语法上的优化,进行查询重写
  • Optimizer:查询优化器
    ①SQL语句在语法解析后查询之前会使用查询优化器确定SQL语句的执行路径并生成 执行计划
    ②该执行计划须表明 使用那些索引 进行查询(全表检索或索引检索),相关表之间的连接顺序是什么,并按照执行计划中的步骤调用存储引擎提供的方法去执行SQL语句,最后将执行结果返回给用户。
    ③会使用 选取-投影-连接 策略进行处理。
  • Caches & Buffers :查询缓存组件
    ①MySQL服务器维持着一些查询相关缓存组件,在进行查询语句时如果在缓存中读取到对应的查询结果,就不必进行解析、优化、执行的整个过程,会直接将结果返回给用户
    ②缓存机制是由一系列小缓存组成的,比如 表缓存,key缓存,权限缓存等
    ③该缓存可在 不同客户端之间共享
    MySQL 8.0中删除

5、引擎层

  • 插件式存储引擎 架构将查询处理和其它的系统任务及数据的存储提取相分离
  • 允许开发者 设置存储引擎
  • 正真负责MySQL服务器中数据的存储和提取,对物理服务器级别维护的底层数据执行操作
powershell 复制代码
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.24 sec)

6、存储层

  • 所有的数据、数据库、表的定义及相关数据,索引都是存在文件系统上,以文件的形式存在,并完成与存储引擎的交互。
  • 在文件系统下,可以使用本地磁盘,使用DAS、NAS、SAN等各种存储系统
相关推荐
向葭奔赴♡8 小时前
Spring Boot 分模块:从数据库到前端接口
数据库·spring boot·后端
JosieBook8 小时前
【数据库】时序数据库选型指南:在大数据与工业4.0时代,为何 Apache IoTDB 成为智慧之选?
大数据·数据库·时序数据库
程序员三明治8 小时前
详解Redis锁误删、原子性难题及Redisson加锁底层原理、WatchDog续约机制
java·数据库·redis·分布式锁·redisson·watchdog·看门狗
chenzhou__8 小时前
MYSQL学习笔记(个人)(第十五天)
linux·数据库·笔记·学习·mysql
一只自律的鸡9 小时前
【MySQL】第二章 基本的SELECT语句
数据库·mysql
liliangcsdn10 小时前
如何使用python创建和维护sqlite3数据库
数据库·sqlite
TDengine (老段)16 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)17 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
@yanyu66617 小时前
idea中配置tomcat
java·mysql·tomcat
安当加密17 小时前
云原生时代的数据库字段加密:在微服务与 Kubernetes 中实现合规与敏捷的统一
数据库·微服务·云原生