理解MySQL架构

本文为翻译的文章,作者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有一个总体的理解。下一篇让我们讨论不同的存储引擎和它们的特点。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180616G198TT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券