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等各种存储系统
相关推荐
小码的头发丝、26 分钟前
Django中ListView 和 DetailView类的区别
数据库·python·django
小兜全糖(xdqt)34 分钟前
mysql数据同步到sql server
mysql·adb
Karoku06636 分钟前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
周全全1 小时前
MySQL报错解决:The user specified as a definer (‘root‘@‘%‘) does not exist
android·数据库·mysql
白云如幻1 小时前
MySQL的分组函数
数据库·mysql
荒川之神2 小时前
ORACLE 闪回技术简介
数据库·oracle
时差9533 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式3 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
秋意钟3 小时前
MySQL日期类型选择建议
数据库·mysql
Dxy12393102164 小时前
python下载pdf
数据库·python·pdf