简述 MySQL 体系结构

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL 虽然以简单著称,但其内部结构并不简单。

简述

MySQL 虽然以简单著称,但其内部结构并不简单。

MySQL 是一个典型的 C/S 架构程序,MySQL Server 提供数据库服务,完成客户端的请求和操作,Client 负责连接到 Server。MySQL 和其他关系型数据库不一样的地方在于它的弹性以及可以通过插件形式提供不同种类的存储引擎,MySQL请求处理过程会根据不同的存储引擎发生变化,比如事务性的InnoDB和非事务性的MyISAM,数据的存储和SQL的执行会产生很大的差异。

MySQL 由连接池、SQL 接口、解析器、优化器、缓存、存储引擎等组成,可以分为三层,即,MySQL Server层存储引擎层文件系统层(存储层)。MySQL Server 层又包括连接层SQL 层(服务层)

网络异常,图片无法展示
|


上图中,连接池(Connection pool)为连接层,系统管理及控制工具(Management Services & Utilities)、...、缓存(Caches & Buffers)等为 SQL 层,可插拔存储引擎(Pluggable Storage Engines)为存储引擎层,系统文件(File system)、文件和日志(Files & Logs)为文件系统层。

客户端连接器(Connectors)不属于以上任何一层,可以将 客户端连接器 理解为各种客户端、应用服务,主要指的是不同语言与 SQL 的交互。


MySQL Server 层

连接层

应用程序通过接口(如:ODBCJDBC)来连接 MySQL,最先连接处理的是连接层。连接层包括通信协议线程处理用户名密码认证 三大部分。

  • 通信协议:负责检测客户端版本是否兼容 MySQL 服务端。
  • 线程处理:指每一个连接请求都会分配一个对应的线程,相当于一条 SQL 对应一个线程,一个线程对应一个逻辑 CPU,在多个逻辑 CPU 之间进行切换。
  • 密码认证:用来验证用户创建的账号、密码,以及 host 主机授权是否可以连接到 MySQL 服务器。

Connection Pool(连接池)属于连接层。由于每次建立连接都需要消耗很多时间,连接池的作用就是将用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。


SQL 层(服务层)

SQL 层是 MySQL 的核心,MySQL 的核心服务都是在这层实现的。主要包含权限判断、查询缓存、解析器、预处理、查询优化器、缓存和执行计划。

  • 权限判断:可以审核用户有没有访问某个库、某个表,或者表里某行数据的权限。
  • 查询缓存:通过 Query Cache 进行操作,如果数据在 Query Cache 中,则直接返回结果给客户端,不必再进行查询解析、优化和执行等过程。
  • 查询解析器:针对 SQL 语句进行解析,判断语法是否正确。
  • 预处理器:对解析器无法解析的语义进行处理。
  • 查询优化器:对 SQL 进行改写和相应的优化,并生成最优的执行计划,就可以调用程序的 API 接口,通过存储引擎层访问数据。

系统管理及控制工具(Management Services & Utilities)、SQL接口(SQL Interface)、解析器(Parser)、优化器(Optimizer)、缓存(Caches & Buffers)都属于 SQL 层,详细说明如下表所示。

名称 说明
Management Services & Utilities  MySQL 的系统管理和控制工具,包括备份恢复、MySQL 复制、集群等。
SQL Interface(SQL 接口) 用来接收用户的 SQL 命令,返回用户需要查询的结果。例如 SELECT FROM 就是调用 SQL Interface。
Parser(查询解析器) 在 SQL 命令传递到解析器的时候会被解析器验证和解析为以便 MySQL 优化器可以识别的数据结构 或者 返回 SQL 语句的错误。
Optimizer(查询优化器) SQL 语句在查询之前会使用查询优化器对查询进行优化,同时验证用户是否有权限进行查询,缓存中是否有可用的最新数据。它使用“选取-投影-连接”策略进行查询。 例如 SELECT id, name FROM student WHERE gender = "女";语句中,SELECT 查询先根据 WHERE 语句进行选取,而不是将表全部查询出来以后再进行 gender 过滤。SELECT 查询先根据 id 和 name 进行属性投影,而不是将属性全部取出以后再进行过滤,最后,将这两个查询条件连接起来生成最终查询结果。
Caches & Buffers(查询缓存) 如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的,比如表缓存、记录缓存、key 缓存、权限缓存等。


存储引擎层(Pluggable Storage Engines)

存储引擎层是 MySQL 数据库区别于其他数据库最核心的一点,也是 MySQL 最具特色的一个地方。

MySQL区别于其他数据库的最重要特点是其插件式的表存储引擎。他根据MySQL AB公司提供的文件访问层抽象接口来定制一种文件访问的机制(该机制叫存储引擎)。

存储引擎是MySQL中具体与文件打交道的子系统,主要负责 MySQL 中数据的存储和提取。

MySQL 支持的存储引擎如下所示:

网络异常,图片无法展示
|

因为在关系数据库中,数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。


文件系统和日志层

文件系统和日志层主要包括 MySQL 中存储数据的底层文件,与上层的存储引擎进行交互,是文件的物理存储层。其存储的文件主要有:配置文件、数据文件、日志文件、MySQL的pid进程文件和socket套接字文件等。

其中,日志文件主要有redo log(重做日志)、undo log(回滚日志)、binlog(归档日志)等。不同的存储引擎存储的日志有所不同。


总结

本文大致介绍了 MySQL 体系结构,其中包括连接层和 SQL 层(服务层),存储引擎层、文件系统和日志层。

网络异常,图片无法展示
|


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 SQL 关系型数据库
MySQL体系结构与配置
MySQL体系结构与配置
52 0
|
3月前
|
存储 SQL 关系型数据库
mysql体系结构及主要文件
了解MySQL的体系结构和它的主要文件,能够帮助数据库管理员和开发者更好地管理和优化数据库。这对于数据库的正常运行、性能优化、数据恢复和系统维护来说是至关重要的。通过对这些组件的深入理解,可以更容易地解决数据库问题,并在必要时定制或调整数据库的行为以满足特定的应用需求。
62 0
|
3月前
|
关系型数据库 MySQL 数据库连接
UiPath 连接 Mysql 报错: 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
UiPath 连接 Mysql 报错: 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
|
5月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】1-MySQL体系结构和存储引擎
【MySQL技术内幕】1-MySQL体系结构和存储引擎
43 1
|
5月前
|
存储 安全 关系型数据库
|
存储 关系型数据库 MySQL
MySQL 体系结构概述
MySQL 体系结构概述
57 0
|
6月前
|
存储 缓存 关系型数据库
MySQL体系结构
MySQL体系结构
|
SQL 存储 关系型数据库
MySQL概述与体系结构
MySQL概述与体系结构
68 1
|
存储 SQL 缓存
MySQL高级第二篇(共四篇)之体系结构、存储引擎、优化SQL步骤、索引使用、SQL优化
最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安 全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
446 1
|
存储 关系型数据库 MySQL
java202303java学习笔记第四十三天函数-存储引擎-mysql体系结构
java202303java学习笔记第四十三天函数-存储引擎-mysql体系结构
58 0