MySQL的整体架构及功能详解

作者:程序新视界日期:2025/10/22

在前面的系列文章中,我们讲解了MySQL基础功能相关的知识,在这篇文章中,重点讲讲MySQL的整体架构,以便在后续的学习中更好的了解所讲的功能属于MySQL的哪一部分,以及前后相关的工作流程。

MySQL整体架构图

这里我们以MySQL官方提供的整体架构图为基准,确保知识的权威性和准确性。

MySQL架构图

通过上图,我们可以看到,MySQL架构设计总共分为四层,分别是客户端层,服务层,存储引擎层与系统文件层。

下面,我们就来看看各层的详细功能及特性。

客户端层

客户端层是MySQL架构中的最顶层,即架构图中的MySQL Connectors部分。客户端通过客户端层向服务器发送请求指令。

客户端可以通过命令行或者图形化界面(GUI),利用有效的MySQL命令和表达式向服务器发起请求。如果指令有效,则会返回结果。

客户端层的主要服务包括:

  • 连接处理(Connection Handling) :当客户端向服务器发送请求时,服务器接收请求并与客户端建立连接。一旦连接建立,服务器会为客户端分配一个线程来处理其请求,所有来自客户端的查询都会通过这个线程执行。
  • 身份验证(Authentication) :在客户端连接到MySQL服务器时,身份验证会在服务器端进行。这通常通过用户名和密码进行验证。
  • 安全性(Security) :在成功进行身份验证后,MySQL服务器会验证客户端是否拥有权限执行特定的查询操作,从而保障系统的安全性。

客户单除了命令行和图形化界面之外,几乎支持所有主流的服务端语言,例如:Java、C、C++、Python等,都是通过各自的API接口与MySQL建立连接。

服务层

服务器层是MySQL架构中的第二个层,负责MySQL关系型数据库管理系统的所有逻辑功能。服务器层也被称为"MySQL架构的大脑"。当客户端发出请求指令后,服务器会检查指令是否匹配,并尽快返回结果。

服务器层包括以下子模块:

  • 线程处理(Thread Handling) :服务器层中的线程处理模块为每个连接的客户端提供独立线程,所有来自客户端的查询都由客户端的线程执行并由这个模块管理。
  • 解析器(Parser) :解析器是一种软件组件,它通过解析输入生成数据结构(解析树)。在解析之前,还会执行词法分析,将输入分解为多个标记(tokens)。接着,解析器通过语法分析和语义分析生成最终的解析树。
  • 优化器(Optimizer) :解析完成后,优化器模块会应用多种优化技术。这些技术可能包括重写查询、调整表扫描顺序或选择合适的索引等。优化器的目标是优化查询执行效率。
  • 查询缓存(Query Cache) :查询缓存模块存储客户端输入查询的完整结果集。在解析之前,MySQL服务器会首先检查查询缓存。如果缓存中存在与输入查询完全相同的结果,服务器会跳过解析、优化和执行过程,直接返回缓存结果。
  • 缓冲与缓存(Buffer and Cache) :缓冲和缓存模块存储用户之前执行的查询。当用户输入新的查询时,查询缓存会检查是否有相同的查询记录。如果有记录,系统将直接返回结果,而无需解析、优化和执行。
  • 表元数据缓存(Table Metadata Cache) :元数据缓存是一个保留内存区域,用于跟踪数据库、索引或对象的信息。当打开的数据库、索引或对象数量增加时,元数据缓存的大小也会随之增大。
  • 键缓存(Key Cache) :键缓存用于唯一标识缓存中的对象。默认情况下,边缘服务器会基于资源路径和查询字符串缓存内容。

需要注意的是,从MySQL 5.7.20开始,查询缓存已被弃用,并在MySQL 8.0中被删除。通常,缓存只适用于表数据不会经常变动的场景,如果表数据经常更新(大多数场景),缓存命中率低下,加上频繁的维护缓存,有时候造成的问题比解决的问题还要多,因此,缓存的功能就显得比较鸡肋了。

存储引擎层

存储层,又称存储引擎层,它是真正负责MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。

存储引擎层是MySQL架构中的独特层级,它使MySQL成为开发者的优选数据库。存储层提供了高度可定制的存储引擎功能,比如InnoDB、MyISAM、NDB和Memory等。

根据不同的情况和需求,用户可以选择适合的存储引擎。这些存储引擎是可插拔的,用户创建的表可以绑定到对应的存储引擎上。

InnoDB存储引擎

基本功能特性:

  • InnoDB是MySQL的默认事务性存储引擎,也是最重要且被广泛使用的存储引擎。
  • 它特别适用于处理大量短暂事务,性能高且支持自动崩溃恢复。
  • 数据存储在独立的表空间中,可以由多个数据文件组成。
  • 表以簇式索引存储,主键查找速度极快。次级索引包含主键列,因此建议尽量设计较小的主键以优化性能。

MyISAM存储引擎

基本功能特性:

  • MyISAM是MySQL 5.1及以前版本的默认引擎,具有功能全面、支持全文索引及GIS(地理信息)功能等特点。
  • 不支持事务和行级锁,并且缺乏崩溃恢复能力。
  • 如果表是只读或者表较小,可以考虑使用MyISAM。
  • 每个表的存储文件通常包括两个:数据文件(.MYD扩展名)和索引文件(.MYI扩展名)。

其他内置存储引擎

基本功能特性:

  • Archive引擎:适用于只需要INSERT和SELECT查询的场景,例如日志记录。因为它使用zlib压缩数据,所以磁盘I/O非常低。
  • Blackhole引擎:不实际存储数据,仅记录传入的查询,适用于日志记录和测试。
  • CSV引擎:支持使用CSV格式的数据表,方便与外部程序直接共享数据。
  • Federated引擎:充当其他服务器之间的中介,通过客户端连接查询远程表。
  • Memory引擎:将所有数据存储在内存中,适用于需要快速访问且数据不需要持久化的场景。
  • Merge引擎:作为MyISAM的变体,允许合并多个类似表到一个虚拟表。
  • NDB Cluster引擎:实现分布式、高可用、故障容错的集群存储。

第三方存储引擎

MySQL的可插拔存储引擎API允许开发者根据具体需求设计自己的存储引擎,例如OLTP存储引擎、列式存储引擎等。

系统文件层

数据存储层,在三层架构中,也有归于存储引擎层的说法,主要是将数据存储在运行于设备的文件系统之上, 并完成与存储引擎的交互。

基础功能特性:

  • 负责将数据以文件的形式存储在文件系统上。
  • 存储引擎通过这个层与磁盘上的数据文件进行交互。
  • 主要包含数据文件 (.frm, .ibd) 和日志文件(如 binlog, redo log, error log)、配置文件、MySQL的进行pid文件和socket文件等。

小结

这篇文章我们从架构的维度,粗粒度的梳理了MySQL实现的基础架构。当后续继续学习MySQ相关的功能特性时,可以更好的定位到相应的功能位于架构中的哪一层以及它们前后所涉及到的分层以及关系。


MySQL的整体架构及功能详解》 是转载文章,点击查看原文


相关推荐


SpringBoot “分身术”:同时监听多个端口
风象南2025/10/21

前言 在日常开发中,我们通常构建的 Spring Boot 应用都是"单面"的——一个端口,一套服务逻辑。但在某些实际场景中,我们可能需要一个应用能够"一心二用":同时提供两套完全不同的服务,分别在不同的端口上运行。 比如: 一个端口面向外部用户,提供 API 服务 另一个端口面向内部管理,提供监控和运维功能 或者在一个应用中同时集成管理后台和用户前台 场景示例 假设我们要开发一个电商平台,需要同时满足: 用户端服务(端口8082) 商品浏览 购物车管理 订单处理 管理端服务(端口808


LeRobot 机器人学习(Robot Learning)入门教程(一)
具身智能与人形机器人2025/10/19

系列文章目录 目录 系列文章目录 前言 一、前言 二、引言 2.1 LeRobotDataset 2.1.1 数据集类的设计 2.2 代码示例:批处理(流式)数据集 2.2.1 批处理(流式)数据集 2.3 代码示例:收集数据 2.3.1 记录数据集 前言         机器人学习正处于一个转折点,这得益于机器学习的快速进步以及大规模机器人数据日益普及。这种从经典的基于模型的方法向数据驱动、基于学习的范式转变,正在为自主系统释放前所未有的能力。本教程全面梳理现代机


如何检查本地是否存在 Docker 镜像 ?
鸠摩智首席音效师2025/10/18

当我们深入研究 Docker 的功能时,发现 Docker 不仅仅是一项技术,这是一个充满镜像、容器和数据卷的宇宙。今天我们戴上侦探帽,调查一个看似简单却至关重要的案件:识别本地是否存在某个 Docker 镜像。这可能看起来微不足道,但通常是维持高效工作的关键步骤,特别是在复杂的 Docker 环境中。 什么是 Docker 镜像 ? 首先,让我们简单地定义一下什么是 Docker 镜像。在 Docker 生态系统中,镜像是轻量级的、独立的、可执行的包含运行一个软件所需的一切的软件包,包括代


.net8.0_webapi 生成二维码
焚 城2025/10/17

文章目录 一、思路二、实现1、Program.cs2、二维码辅助类QrCodeHelper.cs 三、效果保存后: 一、思路 环境: 1、内容生成二维码图片 2、保存到wwwroot为png格式 3、返回存储路径保存到数据库 4、前端读取显示 二、实现 1、Program.cs //配置静态文件路径 app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider(


axios请求
梦6502025/10/15

安装 Axios 在项目中安装 Axios 依赖,可以通过 npm 或 yarn 进行安装。 npm install axios 或 yarn add axios 引入 Axios 在需要使用 Axios 的文件中引入 Axios。 import axios from 'axios'; 发起 GET 请求 使用 Axios 发起 GET 请求,获取数据。 axios.get('https://api.example.com/data') .then(response


公开一个AI产品的商业逻辑与设计方案——AI带来的涂色卡自由
华洛2025/10/14

我孩子正是玩涂色绘本的年纪,我每年给她买绘本的开销就要几百块钱。 涂色绘本这东西也没啥,就是某个角色的线稿,让儿童发挥想象涂色用。 高级一点的,还会给你一个参照的涂好颜色的形象,就是下面图上这种: 每年花个几百块钱虽然不多,但是也总觉的不值,而且绘本的角色、形象都是固定的,孩子想玩的多一次就要买很多本。 直到前几个月开始,我开始自己用AI做线稿图,打印后带给孩子涂色。我发现了一个事情: 孩子的快乐一点都没少,甚至快乐加倍了! 以前买一本拉布布就涂几张,不感兴趣了,扔一边就去涂公主。 现在完全不


设计模式-迭代器模式
紫菜紫薯紫甘蓝2025/10/13

设计模式-迭代器模式 迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern),用来给类实例提供一种遍历对象的方式。 案例分析 首先写一个经典的 User 类 @Data @ToString public class User { private String uuid; private String name; private Integer age; } 通常我们遍历一个对象有三种方式 pub


医疗设备控制系统中同步与异步通信的架构设计
oioihoii2025/10/11

在医疗设备控制系统的开发过程中,我们面临一个经典的技术挑战:如何在保持用户界面流畅响应的同时,可靠地处理设备控制的长时间操作。本文将通过一个医疗床控制系统的实际案例,分享我们在同步与异步通信架构设计上的解决方案。 问题场景 我们的医疗床控制系统采用主从架构:Host(主控端)与EPC(设备控制单元)通过双端口通信: Command端口:用于发送控制命令和接收立即响应 Event端口:用于接收异步的执行结果和状态更新 关键需求: 用户点击"移动病床"按钮后,需要等待设备执行完成(可能耗时数十


【SCI一区】【电动车】基于ADMM双层凸优化的燃料电池混合动力汽车研究(Matlab代码实现)
荔枝科研社2025/10/9

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭:行百里者,半于九十。 💥1 概述 基于ADMM双层凸优化的燃料电池混合动力汽车研究 随着车辆互联性的出现,互联汽车 (CVs) 在增强道路安全、改善乘坐舒适性、提高交通效率和提高能源效率方面提供了巨大的潜力。通过从车对车 (V2V) 和车对基础设施 (V2I) 通信中获取交通信息,CV 能够更准确、更广泛地感知


第7章:数据库与持久化存储
芝麻开门-新起点2025/10/8

7.1 为何需要数据库:记忆与状态管理 内容讲解 默认情况下,AI Bot 是**“无状态”的。这意味着除了短暂的当前对话上下文,它不记得任何过去的事情。每次对话都是一次全新的开始。然而,在许多真实场景中,我们需要 Bot 拥有记忆**,能够持久化地存储和检索信息。这就是**数据库(Database)**的作用。 数据库为 Bot 提供了以下关键能力: 长期记忆:记住用户的偏好、历史订单、个人信息等。例如,一个订餐 Bot 应该记住你常去的地址和喜欢的口味。状态跟踪:在复杂的多轮任务中,跟踪当前

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0