本文为翻译的文章,作者Rathish Kumar,原文:
https://www.rathishkumar.in/2016/04/understanding-mysql-architecture.html
对于IT从业人士来说,世界上最流行的开源数据库系统的架构是非常重要的。有很多原因促成了MySQL在全世界的普及,但其中一个主要原因是它的架构,尽管有很多大玩家,比如Oracle,SQL Server和DB2,但MySQL的架构让它很独特并且是大部分开发者的首选。在这篇文章中,我们将要讨论MySQL关系型数据库管理系统的内部架构。本文是为初级的DBA,数据开发者和软件开发者,以及对于MySQL感兴趣的读者准备的。
主要组成部分:
MySQL架构描述了MySQL系统中组件之间是怎样相互关联的。基本上,MySQL架构是一个客户端-服务器系统。MySQL数据库服务器是这个架构中的服务器,连接到服务器的应用程序是客户端。MySQL架构包含以下主要部分。
应用层:
该层位于MySQL架构的最上层;你可以在很多客户端-服务器的架构中看到同样的这一层。这层包括一些对于大多数据客户端-服务器应用都通用的服务,其中一些服务列举如下:
连接处理
认证
安全
连接处理:
当一个客户端连接服务器的时候,客户端获得了为这个连接而启动的它自己的线程。来自那个客户端的所有查询都在那个特定的线程里进行处理。此线程被服务器缓存,所以不需要对每一个新连接都进行创建和销毁的操作。
认证:
每当一个客户端连接MySQL服务器的时候,服务器都会执行认证。认证基于用户名,客户端主机和客户端用户密码。
比如:
root@localhostroot:客户端用户名
localhost:主机名,请求从这里发起
安全:
客户端连上MySQL服务器以后,服务器会检查客户端是否有权限发起特定的请求。
比如:
MySQL服务器层:
该层处理MySQL关系型数据库管理系统的所有逻辑功能。MySQL服务器的大脑就位于这一层。MySQL的逻辑层分成多个子部件,包括:
MySQL服务和工具
SQL接口
SQL解析器
优化器
缓存 & 缓冲
MySQL服务和工具:
相对来讲,MySQL提供了广泛的服务和工具。这是MySQL盛行的主要原因之一。该层提供了MySQL系统管理和维护的服务与工具。下面列举了其中一些:
备份 & 恢复
安全
复制
集群
分片
工作台
SQL接口:
结构化查询语言(SQL)是一种查询语言,用来查询MySQL服务器。它是一种MySQL用户和服务器交互的工具。SQL接口中一些组件如下:
数据操纵语言(DML)
数据定义语言(DDL)
存储过程
视图
触发器
解析器:
MySQL解析查询以便创建一个内部结构(解析树)。MySQL解析器是一种单通道的编译器。按照《MySQL内幕》所描述,解析器的结构如下:
词法分析(从一个字符流中生成词语或者标记),当解析常规语句的时候,它是在第一阶段实现的。
语法分析(生成句子),语义分析(确保这些句子都讲得通),以及代码生成(为编译准备),所有这些都是在代码阶段一次性完成的。
优化器:
创建了内部解析树之后,MySQL运用了多种优化技术。这些技术可能包括,查询重写,扫描表的顺序以及选择合适的索引。实际上你可以询问服务器来解释优化的多个方面。
比如:
EXPLAIN SELECT * FROM world.city;
缓存:
MySQL缓存(查询缓存)保存了SELECT语句的完整结果集。在解析查询之前,MySQL服务器先找查询缓存。如果客户端发起的查询与缓存中的完全一致,服务器就简单地跳过解析、优化甚至执行,它直接就从缓存中把输出显示出来。
存储引擎层:
MyISAM.
InnoDB.
Federated.
Mrg_MyISAM.
Blackhole.
CSV.
Memory.
Archive.
Performance_schema.
MySQL提供可插拔式的存储引擎,不同的存储引擎可以定义在表的级别。一个数据库里包含的表可能会有多种存储引擎。
mysql>SHOW ENGINES;
Show engines命令把服务器支持的所有存储引擎都列举出来。希望这个帖子能够让你对于MySQL有一个总体的理解。下一篇让我们讨论不同的存储引擎和它们的特点。
领取专属 10元无门槛券
私享最新 技术干货