MySQL - 一文了解MySQL的基础架构及各个组件的作用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL - 一文了解MySQL的基础架构及各个组件的作用

1. 概述

不管是开运、运维、测试,都或多或少的要接触MySQL,了解MySQL的基础架构及各个组件之间的关系,有助于我们更加深入的理解MySQL,下面由一张MySQL基础架构图来一起走进MySQL。

MySQL可以基本划分为Server层存储引擎层两部分:

Server层包含了MySQL大多数核心功能,除了图中标注的连接器,查询缓存,分析器,优化器,执行器,还有所有的内置函数(日期,时间,数学和加密函数),所有跨存储引擎的功能都在这一层实现,如存储过程、触发器、视图等。

存储引擎层负责MySQL中数据的存储和提取。和Linux下的各种文件系统一样,每个存储引擎都有自己的优势和劣势,各种存储引擎通过提供API和Server层对接,通过API屏蔽各种存储引擎之间的差异。常见的存储引擎有InnoDB、MyISAM、Memory,现在最常用的是InnoDB,也是从MySQL5.5版本开始成为默认的存储引擎,在5.5之前默认的是MyISAM

2. 连接器

连接器是MySQL Server层的第一个模块,也是处理客户端请求的模块,连接器负责跟客户端建立连接、获取权限、维持和管理连接。

  • 登录命令
mysql -h$ip -P$port -u$user -p
# 或者
mysql -h$ip -P$port -u$user -p$password
  • 如果账号密码错误,会提示:Access denied for user

如果登录认证通过,会查询当前用户下的权限,之后用户的任何操作都是在这个权限范围内,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。

3. 查询缓存

查询缓存在 MySQL5.7.20 版本已过时,在 MySQL8.0 版本中被移除,这里作为了解即可。

MySQL 查询缓存存储客户端请求的查询结果信息( SELECT 语句)。MySQL 服务器在接收到相同的请求时,会直接将查询缓存中的结果返回给客户端,不再去数据库中重新查询。而且,查询缓存是在多个会话中共享的,一个客户端的查询缓存结果可以被另一个客户端的相同请求复用,从而加快了查询效率。

缓存以key-value的形式存储,存放在一个引用表中,key是通过一个哈希值的引用,这个哈希值包括查询本身(sql),当前要查询的数据库,客户端协议的版本等一些其他会影响返回结果的的信息;查询结果作为value(任何字符上的变化,例如空格,注释都会导致缓存不命中)。

如果表被更改,所有的缓存都将失效,表的更改是指数据的改变和表结构的改变,包括INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等。

对于数据经常变更的数据库来说,缓存命中率是很低的,这时查询缓存就是弊大于利,所以不建议使用缓存;而对于那些长时间不变、查询频率很高的数据,可以采用Redis缓存。

4. 分析器

我们根据MySQL语法编写一条SQL语句交给Server层以后,分析器会对SQL进行词法分析和语法分析。

已如下SQL为例:

select id,name from `tab`;
  • 词法分析

SQL语句是由多个字符串和空格组成的,MySQL的分析器需要识别里面的字符串分别是什么,代表什么。

MySQL从 “select” 关键字分析出这是一个查询语句,把字符串识别成 “tab” 表 ‘tab’,把字符串 “id,name” 识别成列 ‘id’,‘name’。

  • 语法分析

根据词法分析的结果,语法分析器会根据语法规则,判断你输入的SQL语句是否满足MySQL语法。

mysql> elect id,name from tab;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'elect id,name from tab' at line 1

一般语法错误会提示第一个出现错误的位置,所以你要关注的是紧接 “use near” 的内容。

5. 优化器

经过分析器生成的语法树被认为是合法的,交由优化器转化成执行计划。

MySQL判断出了一条SQL语句要做什么之后,对其进行各种优化,包括重写查询语句、选择合适的索引、表的读取顺序等等。

MySQL的优化器是基于成本的优化,尝试预测一个查询使用某种执行计划的成本,进而选择最小的那个。例如:表中有多个索引的时候决定使用哪一个、使用联合索引的时候根据索引调整where条件的顺序、多表关联(join)的时候,决定各个表的连接顺序等等。

如果想知道优化器是怎么进行优化决策的,可以通过explain获取优化的信息,explain具体的使用和解释后面章节会说明的。

6. 执行器

语句经过优化后,就要进入执行阶段,开始执行的时候,要先判断权限,如果没有,就返回没有权限的错误。如果有权限,就调用存储引擎的API操作数据。

6. 总结

用一条SQL语句的执行过程来总结一下:

  1. 去数据库连接池中获取一条数据库连接;
  2. 获取连接后把SQL语句发给数据库服务;
  3. 数据库服务负责监听网络事件接收到消息后交给SQL接口,SQL接口基于通信协议解析出SQL语句;
  4. 将解析出来的语句交给SQL解析器,解析出SQL语句要做的事情并提供所有方案;
  5. 查询优化器根据解析出的信息,优化出最佳的查询路径;
  6. 将优化后的查询路径交给SQL执行器去执行;
  7. 执行器调用存储引擎接口执行最优路径;
  8. 存储引擎在被执行器调用的过程中负责去访问内存和磁盘完成数据的更新等操作。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
存储 设计模式 数据库
构建高效的安卓应用:探究Android Jetpack架构组件
【4月更文挑战第20天】 在移动开发的世界中,构建一个既高效又可维护的安卓应用是每个开发者追求的目标。随着Android Jetpack的推出,Google为开发者提供了一套高质量的库、工具和指南,以简化应用程序开发流程。本文将深入探讨Jetpack的核心组件之一——架构组件,并展示如何将其应用于实际项目中,以提升应用的响应性和稳定性。我们将通过分析这些组件的设计原则,以及它们如何协同工作,来揭示它们对于构建现代化安卓应用的重要性。
|
5天前
|
监控 负载均衡 算法
构建高效微服务架构的五大核心组件
【4月更文挑战第6天】随着现代业务需求的多样化和复杂性增加,传统的单体应用已无法满足快速迭代与灵活部署的需求。微服务架构应运而生,以其高度模块化、独立部署和可伸缩性成为企业转型的关键。本文聚焦于构建高效微服务架构的核心组件,从服务发现、配置管理、负载均衡、容错处理到服务监控五个方面进行深入剖析,旨在提供一套全面的技术指南以支持后端开发的最佳实践。
|
3天前
|
前端开发 Android开发
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
|
5天前
|
Kubernetes API 调度
Kubernetes学习-核心概念篇(二) 集群架构与组件
Kubernetes学习-核心概念篇(二) 集群架构与组件
|
5天前
|
SQL canal 运维
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
|
5天前
|
运维 负载均衡 关系型数据库
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
|
5天前
|
关系型数据库 MySQL 数据库
MySQL集群 双主架构(配置命令)
MySQL集群 双主架构(配置命令)
|
5天前
|
设计模式 容灾 关系型数据库
MySQL 主从复制架构
MySQL 主从复制架构
|
5天前
|
设计模式 前端开发 数据库
构建高效Android应用:使用Jetpack架构组件实现MVVM模式
【4月更文挑战第21天】 在移动开发领域,构建一个既健壮又易于维护的Android应用是每个开发者的目标。随着项目复杂度的增加,传统的MVP或MVC架构往往难以应对快速变化的市场需求和复杂的业务逻辑。本文将探讨如何利用Android Jetpack中的架构组件来实施MVVM(Model-View-ViewModel)设计模式,旨在提供一个更加模块化、可测试且易于管理的代码结构。通过具体案例分析,我们将展示如何使用LiveData, ViewModel, 和Repository来实现界面与业务逻辑的分离,以及如何利用Room数据库进行持久化存储。最终,你将获得一个响应迅速、可扩展且符合现代软件工
27 0
|
5天前
|
缓存 小程序
Java+saas模式 智慧校园系统源码MySQL5.7+ elmentui前后端分离架构 让校园管理更高效的数字化平台系统源码
智慧校园是在数字通增强版基础上,研发的一套面向教育行业的数字化校园软件,其显著特点是集学校网站、协同办公、即时通讯、网络空间、移动办公于一体。在满足教职工日常办公需要的同时,拥有诸多教育行业功能,并提供便捷易用的“家校通”平台以满足老师、学生、家长的日常交流。数字通智慧校园教育版中的协同办公、即时通讯、移动办公等功能模块随通用版一同改进,将网络办公最新技术应用到教育行业。
47 1

推荐镜像

更多