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等各种存储系统
相关推荐
云老大TG:@yunlaoda3601 分钟前
如何使用华为云国际站代理商的BRS进行数据安全保障?
大数据·数据库·华为云·云计算
工具人55555 分钟前
strip()方法可以删除字符串中间空格吗
数据库·mysql
松涛和鸣9 分钟前
35、Linux IPC进阶:信号与System V共享内存
linux·运维·服务器·数据库·算法·list
xinyu_Jina17 分钟前
局域网文件传输:P2P应用层协议——元数据握手与数据通道的生命周期管理
数据库·asp.net·p2p
一枚正在学习的小白30 分钟前
prometheus监控mysql服务
linux·运维·mysql·prometheus
彬鸿科技34 分钟前
【SDR课堂第42讲】RFSOC开发入门之开发环境搭建(三)
linux·运维·数据库·ubuntu·postgresql·软件无线电·软无
soft200152534 分钟前
MySQL Buffer Pool深度解析:当缓存页不足时如何基于LRU算法进行淘汰
mysql
九章-35 分钟前
金仓数据库助力中国石油安全环保技术研究院安全生产智能管控系统全面实现数据库国产化替代
数据库·安全
陌路2036 分钟前
redis 发布订阅功能
数据库·redis·缓存
丁丁丁梦涛38 分钟前
navicat跨服务器连接MySQL数据库
服务器·数据库·mysql