数据库 & 数据库实例
在讲 MySQL 体系结构之前,我们先要搞懂数据库与数据库实例这两个概念,这两者其实是不一样的概念。
数据库
定义:物理操作系统文件或其他形式文件类型的集合。
通常来说数据库就是一组二进制文件,存储在文件系统上。
数据库实例
定义:
- 由数据库后台进程 / 线程以及一个共享内存区组成。
- 共享内存可以被运行的后台进程 / 线程所共享。
- 数据库实例才是真正用来操作数据库文件的。
通常来说数据库实例就是用来操作数据库文件的。
实例与数据库之间的关系
MySQL 数据库中实例与数据库是一对一之间的关系。
MySQL 体系结构
MySQL 数据库是单进程多线程的架构,和 SQL Server 类似,和 Oracle 不一样,Oracle 是多进程架构。
MySQL 体系结构如下图所示。
MySQL 从概念上分为四层,这四层自顶向下分别是网络连接层,服务层(核心层),存储引擎层,系统文件层。我们自顶向下开始讲解。
网络连接层(Client Connectors)
主要负责连接管理、授权认证、安全等等。每个客户端连接都对应着服务器上的一个线程。服务器上维护了一个线程池,避免为每个连接都创建销毁一个线程。当客户端连接到 MySQL 服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过 SSL 证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。这一层并不是 MySQL 所特有的技术。
服务层(MySQL SERVER)
第二层服务层是 MySQL 的核心,MySQL 的核心服务层都在这一层,查询解析,SQL 执行计划分析,SQL 执行计划优化,查询缓存。以及跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。
- 连接池(Connection Pool):管理、缓冲用户的连接,线程处理等需要缓存的需求。
- 管理服务和工具组件(Services & utilities):系统管理和控制工具,例如备份恢复、MySQL 复制、集群等。
- SQL 接口(SQL Interface):接受用户的 SQL 命令,并且返回用户需要查询的结果。
- 查询解析器(Parser):SQL 命令传递到解析器的时候会被解析器验证和解析(权限、语法结构)。
- 查询优化器(Optimizer):SQL 语句在查询之前会使用查询优化器对查询进行优化。
- 缓存(Caches):如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
存储引擎层(Pluggable Storage Engines)
负责 MySQL 中数据的存储与提取。 服务器中的查询执行引擎通过 API 与存储引擎进行通信,通过接口屏蔽了不同存储引擎之间的差异。MySQL 采用插件式的存储引擎。MySQL 为我们提供了许多存储引擎,每种存储引擎有不同的特点。我们可以根据不同的业务特点,选择最适合的存储引擎。如果对于存储引擎的性能不满意,可以通过修改源码来得到自己想要达到的性能。
MySQL 存储引擎的特点:
**
- MySQL 采用插件式的存储引擎。
- 存储引擎是针对于表的而不是针对库的(一个库中不同表可以使用不同的存储引擎),服务器通过 API 与存储引擎进行通信,用来屏蔽不同存储引擎之间的差异。
- 不管表采用什么样的存储引擎,都会在数据区,产生对应的一个 frm 文件(表结构定义描述文件)。
可以通过 SHOW ENGINES;
命令查看 MySQL 支持的存储引擎。
通过 SHOW TABLE STATUS;
命令查看当前库中的表使用的是什么存储引擎。
系统文件层(File System NTFS ext4 SAN NAS)
系统文件层包含数据、索引、redo 日志、undo 日志、错误日志、查询记录、慢查询等,后文会有详细的介绍。
比如该层将数据库的数据存储在文件系统之上,并完成与存储引擎的交互。
MySQL 逻辑存储结构
首先我们有一个 MySQL 实例,实例下面有多个 Database,每个 Database 有一个 Schema,每个 Schema 下面有多张表,基于表还可以建很多虚拟视图。整个结构如下图所示。
在 MySQL 数据库中,Database 和 Schema 是一对一的,所以 Database 和 Schema 是一个概念。
create database aaa;
# 可以通过删除schema,来删除database,两者是一个概念
drop schema aaa;
create schema aaa;
在其他数据库中,一个 Database 可以对应多个 Schema,比如 PgSQL 就存在多个 Schema。
MySQL 物理存储结构
在安装 MySQL 的时候会生成一个 data 目录,这个目录就是 MySQL 的数据文件路径,通过在配置文件中的 datadir 参数配置,一般情况下,不要把 MySQL 的数据文件路径配置在 MySQL 的安装目录下。
在 MySQL 的数据文件路径下,一个 Database 对应一个文件夹,每张表对应一组文件,不同存储引擎的表文件是不一样的,这里的 Country 表使用的是 MyISAM 存储引擎,关于存储引擎后面会单独分享一篇文章。
作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/bq2ib3 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。