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等各种存储系统
相关推荐
程序员阿鹏2 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
瀚高PG实验室3 小时前
使用pg_stat_statements抓取数据库TOP SQL
数据库·sql·postgresql·瀚高数据库
yanwumuxi4 小时前
【数据库系列】opensearch数据备份和恢复
数据库
anxiao_m4 小时前
2026企业AI数字孪生选型攻略,不同场景对应不同解决方案
大数据·网络·数据库
SelectDB4 小时前
从 ClickHouse 迁移到 Doris:SQL 兼容、同步与验证清单(实战笔记)
大数据·数据库·数据分析
这个DBA有点耶4 小时前
非关系型数据库到底有几种?键值、文档、列族、图,一篇讲透
mysql·架构·nosql
SelectDB5 小时前
Doris 还是 ClickHouse?一张表说清 6 个关键差异(实战笔记)
大数据·数据库·数据分析
oradh5 小时前
Oracle Undo问题总结(两类Undo表空间不足和单个会话占用大量Undo的性能问题)
数据库·oracle
企业数字化笔记5 小时前
固定资产财务账与实物账怎么对账?折旧快照、差异检测与SQL核对
android·数据库·sql
DBA_G5 小时前
GBase 8a表空间多路径存储数据迁移链路适配解析
数据库·oracle