MySQL架构概述

MySQL是互联网行业中使用极其广泛的一种关系型数据库,它的架构可以在多种不同的业务场景中应用并得到很好的发挥作用,例如:Web类应用,嵌入到应用程序中,也可以支持数据仓库、内容索引、高可用的冗余系统等各种应用类型。工欲善其事,必先利其器。为了更好地应用MySQL,我们先从整体上了解MySQL架构的设计。

1、MySQL逻辑架构说明

MySQL架构概述
图1.MySQL服务器逻辑架构图

上图是我画的一幅描述MySQL各组件协同工作的逻辑架构图,图中几大核心的组件有助于我们了解MySQL服务器的设计。

客户端

连接MySQL服务器端的具体工具集。如:本地客户端软件(Navicat等),或者是应用程序中的数据源集合(如JDBC、ODBC连接)。

Server

MySQL实例,提供数据存储和处理的MySQL服务器进程。

mysqld

管理MySQL实例,是一个守护进程,管理客户端的请求。

连接管理/安全认证

每个客户端连接都会在服务器进程中拥有一个线程,MySQL服务器负责缓存线程,不需要为每一个新连接重新创建线程。

当客户端连接MySQL服务器时,也会需要进行授权登录以保证安全。如居于用户名、SSL方式等。

一旦客户端连接服务器成功,服务器会继续验证该客户端是否具有执行某个特定资源(Database、Table、Select、DDL)的权限。

解析器

关系型数据库拥有一套SQL语句语法标准,解析器会对每一条SQL语句进行解析操作,如果不符合语法标准的,就直接报错。否则,为该SQL语句生成一个SQL_ID,解析后生成一个解析树(MySQL内部数据结构),转交后续步骤操作。

查询缓存

在解析查询之前,服务器会先检查查询缓存,如果能够在其中找到对应的查询,服务器就不必执行解析、优化和执行的过程,直接返回查询缓存中的结果集。

优化器

服务器本身会针对解析器解析出来的SQL进行优化处理,包括:选择合适的索引、重写查询、决定表的读取顺序等,从而创建一个有效率的执行计划。

优化器并不关心表使用了什么存储引擎,但实际上存储引擎是对优化查询是有影响的。

用户也可以通过优化SQL语句编写、创建索引等方式来人工干预执行计划,以获得最优的执行计划。可以通过explain来查看SQL的执行计划过程。

Metadata Cache

缓存对象元信息和统计信息。

Keys Cache

缓存索引结构,通常给MyISAM引擎使用。

存储引擎

存储引擎负责MySQL中的数据存储和提取,服务器通过API与存储引擎进行通信。这些接口屏蔽了不同存储引擎的差异,使得对上层的查询过程是透明的。

2、常见存储引擎对比

MySQL架构概述
图2:MyISAM与InnoDB常见对比图