Mysql杂志(十四)——Mysql逻辑架构

Mysql逻辑架构

这个图相信大家并不陌生,这个就是mysql的逻辑结构图下面是主包让AI生成的翻译后的逻辑结构图:

我们先来看看各个部分的作用是什么

第一层:客户端连接层 (Client Layer)

这一层负责处理所有客户端连接到服务器的请求。责任就是:

  • 身份认证:验证用户名、密码、主机权限等。
  • 安全管理:检查用户是否有执行某个操作的权限。
  • 连接管理:管理连接的线程(如线程缓存thread_cache_size),处理SHOW PROCESSLIST等命令。
  • 如果连接校验通过,服务器会为该连接分配一个线程,后续该客户端的请求均在这个线程中进行。

这一层的内容还是很好理解的就是我们熟知的连接池。

第二层:核心服务层 (Server Layer / SQL Layer)

这是MySQL的"大脑",负责处理SQL语句的解析、优化和执行。​这一层是跨存储引擎的,意味着不管底层用什么存储引擎,SQL语句都会在这里经过相同的处理流程。

1.SQL接口 (SQL Interface)​

职责​就是接收客户端发送的SQL命令(如DML、DDL、存储过程、视图等),并返回处理结果,相当于一个指挥官,接收命令并决定下一步交给谁处理。

2.解析器 (Parser)​

职责 ​就是对SQL语句进行词法分析和语法分析。将完整的SQL语句拆分成一个个的单词(SELECT*FROMt)。根据语法规则,判断SQL语句是否合法,最终生成一个解析树 ​(或语法树)。比如它会检查你是否把WHERE写成了WHER

3.优化器 (Optimizer)​

​这是最复杂的组件之一,它的任务是对解析器生成的解析树进行优化。如使用哪个索引或全表扫描?多表关联顺序 ​:(A JOIN B) JOIN C还是 A JOIN (B JOIN C)子查询优化 ​:将某些子查询转化为更高效的JOIN操作。最终产生一个它认为成本最低(cost-based)的执行计划 。你可以使用EXPLAIN命令来查看优化器生成的执行计划。

4.查询缓存 (Query Cache) (MySQL 8.0中已移除)​

在8.0之前的版本,如果查询语句和数据完全一致,会直接从缓存返回结果。但由于其严重的瓶颈问题(任何表有更新,该表的所有查询缓存都会失效),在MySQL 8.0中这个功能被彻底移除了。

5.缓存和缓冲 (Caches & Buffers)​

这里指的是各种全局的缓存,如表缓存权限缓存 等。InnoDB存储引擎自己的缓冲池(Buffer Pool)不属于这一层,而是属于存储引擎层。

6.系统管理和控制工具(System Management & Control Tools)

是MySQL服务器的全局管理员和大脑,负责制定规则、监控全局状态、进行后台维护。作用如下:

1.​制定全局规则与策略 ​:定义整个MySQL实例的安全策略,即所有用户的权限信息最终存储在 mysql.usermysql.db等系统表中。设置全局系统变量(如 max_connections最大连接数、innodb_buffer_pool_size缓冲池大小)。

2.资源调度与全局监控 ​:监控整个服务器的健康状态(CPU、内存、IO使用情况)。管理全局性的资源,如缓存(查询缓存、表缓存)、线程池的整体状态。记录全局性的日志,如错误日志(Error Log)、慢查询日志(Slow Query Log)、二进制日志(Binlog)。这些日志记录的是所有连接的行为。

3.后台维护与自治​:执行定期任务,如刷新缓存、更新统计信息、日志轮转(Log Rotation)。负责表的自动修复、崩溃恢复等。

而连接池就是调用了系统管理工具和控制工具进行鉴权等一系列操作。

第三层:存储引擎层 (Storage Engine Layer)

存储引擎负责数据的存储和提取 。MySQL的核心服务层通过定义好的API与存储引擎进行交互。​这种设计使得存储引擎是"可插拔"的,你可以根据需要为不同的表选择不同的存储引擎。

这个就是最好sql执行到存储引擎,然后存储引擎再通过API去访问文件系统,最最后再把结果放回。

下面这个是主包从其他博主拿过来的图,对于逻辑架构的文章要比主包写的好很多https://www.cnblogs.com/binliubiao/p/15230069.html大家可以去仔细看看,内容还是很多的。

总结

这一篇主要讲的就逻辑架构,但是这一篇主包承认比较水,很多都是Ai生成的,因为主包认为这一篇的内容不是很难(皮毛的话)。

相关推荐
optimistic_chen20 分钟前
【Redis 系列】常用数据结构---String类型
数据结构·数据库·redis·缓存·string
无心水23 分钟前
【神经风格迁移:工程化】27、神经风格迁移全栈进阶实战:Docker容器化与K8s部署,从单机到云原生
docker·云原生·架构·神经风格迁移·docker容器化·ai部署·vgg算法
大猫子的技术日记25 分钟前
Redis 快速上手实战教程:从零搭建高性能缓存系统
数据库·redis·缓存
莳花微语25 分钟前
记录一次生产中mysql主备延迟问题处理
数据库·mysql
Hello.Reader33 分钟前
Flink JDBC Driver把 Flink SQL Gateway 变成“数据库”,让 BI / 工具 / 应用直接用 JDBC 跑 Flink SQL
数据库·sql·flink
李宥小哥33 分钟前
SQLite02-安装
数据库
一 乐36 分钟前
景区管理|基于springboot + vue景区管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
lbb 小魔仙38 分钟前
【Java】Spring Boot 与 Spring Cloud 整合:微服务架构入门实战
java·spring boot·spring cloud·架构
JIngJaneIL39 分钟前
基于java + vue连锁门店管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
阿拉伯柠檬40 分钟前
MySQL内置函数(二)
linux·数据库·mysql·面试