mysql体系介绍

数据库和数据库实例概念

1
2
3
数据库:存储数据的集合
数据库实例:操作数据库的集合
从操作系统的角度,数据库实例表现为一个进程,对应多个线程,在非集群数据库架构中,数据库与数据库实例存在一一对应关系,在数据库集群中,可能存在多个数据库实例操作一个数据库的情况,即多对一关系

mysql基架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql基架大致分为9个模块
1.mysql向外提供的交互接口(connectors):通过该组件来操作sql,实现sql的交互

2.管理服务组件和工具组件(management & utilities):通过该组件提供对mysql的集成管理,如备份,恢复,安全管理等

3.连接池组件(connection pool):负责监听对客户端向MySQL Server端的各种请求,到目标模块。每个成功连接MySQL Server的客户请求都会被创建或分配一个线程,该线程负责客户端与MySQL Server端的通信,接收客户端发送的命令,传递服务端的结果信息等。

4.sql接口组件(sql interface):接受用户sql命令,如DML,DDL和存储过程等,并将最终结果返回

5.查询分析器组件(parser):首先分析SQL命令语法的合法性,并尝试将SQL命令分解成数据结构,若分
解失败,则提示SQL语句不合理。

6.优化器组件(optimizer):对SQL命令按照标准流程进行优化分析

7.缓存(caches & buffers):包括全局和引擎特定的缓存,提高查询的效率。如果查询缓存中有命中的
查询结果,则查询语句就可以从缓存中取数据,无须再通过解析和执行。这个缓存机制是由一系列小缓存组成,如表缓存、记录缓存、key缓存、权限缓存等。

8.插件式存储引擎(Pluggable Storage Engines)

9.物理文件(file system)

存储引擎

1
2
3
4
5
6
7
8
9
10
11
1.什么是MySQL存储引擎
MySQL属于关系型数据库,而关系型数据库的存储是以表的形式进行的,对于表的创建,数据的存储,检索,更新等都是由MySQL存储引擎完成的,这也是MySQL存储引擎在MySQL中扮演的重要角色。SQL Server和Oracle这两种数据库的存储引擎只有一个,而MySQL的存储引擎种类比较多,如MyISAM存储引擎,InnoDB存储引擎和Memory存储引擎. MySQL之所以有多种存储引擎,是因为MySQL的开源性决定的。MySQL存储引擎,从种类上来说,大致可归结为官方存储引擎和第三方存储引擎。MySQL的开源性,允许第三方基于MySQL架构,开发适合自己业务需求的存储引擎。

2.MySQL存储引擎作用
MySQL存储引擎在MySQL中扮演重要角色,其作比较重要作用,大致归结为
如下两方面:
作用一:管理表创建,数据检索,索引创建等
作用二:满足自定义存储引擎开发。

3.MySQL引擎种类
不同种类的存储引擎,在存储表时的存储引擎表机制也有所不同,从MySQL存储引擎种类上来说,可以分为官方存储引擎和第三方存储引擎。当前,也存在多种MySQL存储引擎,如MyISAM存储引擎,InnoDB存储引擎,NDB存储引擎,Archive存储引擎,Federated存储引擎,Memory存储引擎,Merge存储引擎,Parter存储引擎,Community存储引擎,Custom存储引擎和其他存储引擎。其中,比较常用的存储引擎包括InnoDB存储引擎,MyISAM存储引擎和Momery存储引擎。

连接层

1
2
3
4
5
6
mysql是一个进程,会等待客户端的连接(大概在150-250个线程)。是mysql体系架构的最上层,主要包含以下内容:
连接处理:连接处理 当一个客户端向服务端发送连接请求后,MySQL server会从线程池中分配一个线程来和客户端进行连接,以后该客户端的请求都会被分配到该线程上。MySQL Server为了提高性能,提供了线程池,减少了创建线程和释放线程所花费的时间。

用户鉴权:当客户端向MySQL服务端发起连接请求后,MySQL server会对发起连接的用户进行鉴权处理,MySQL鉴权依据是: 用户名,客户端主机地址和用户密码

安全管理: 当客户连接到MySQL server后,MySQL server会根据用户的权限来判断用户具体可执行哪些操作

服务层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
该层可分为下面的组件
MySQL Management Server & utilities(系统管理)
SQL Interface(SQL 接口)
SQL Parser(SQL 解析器) Optimizer (查询优化器)
Caches & buffers(缓存)

1. MySQL Management Server & utilities(系统管理) 提供了丰富的数据库管理
功能,具体如下:
数据库备份和恢复
数据库安全管理,如用户及权限管理
数据库复制管理
数据库集群管理
数据库分区,分库,分表管理
数据库元数据管理

2. SQL Interface(SQL 接口) SQL接口,接收用户的SQL命令并进行处理,得
到用户所需要的结果,具体处理功能如下: Data Manipulation Language (DML). Data Definition Language (DDL).
存储过程
视图
触发器

3. SQL Parser(SQL 解析器) 解析器的作用主要是解析查询语句,最终生成语法树。首先解析器会对查询语句进行语法分析,如果语句语法有错误,则返回相应的错误信息。语法检查通过后,解析器会查询缓存,如果缓
存中有对应的语句,就直接返回结果不进行接下来的优化执行操作。
注:疑问?从缓存中查出来的数据会不会被修改,与真实的数据不一致,这里读者大可放心,因为缓存中数据被修改,会被清出缓存。

4. Optimizer(查询优化器) 优化器的作用主要是对查询语句进行优化,包括选择合适的索引,数据的读取方式。

5. Caches & buffers(缓存) 包括全局和引擎特定的缓存,提高查询的效率。如果查询缓存中有命中的查询结果,则查询语句就可以从缓存中取数据,无须再通过解析和执行。这个缓存机制是由一系列小缓存组成,如
表缓存、记录缓存、key缓存、权限缓存等。

引擎层

1
2
3
4
5
6
7
8
9
10
存储引擎 存储引擎是MySQL中具体与文件打交道的子系统,也是MySQL最有特色的地方。

MySQL区别于其他数据库的最重要特点是其插件式的表存储引擎。他根据MySQL AB公司提供的文件访问层抽象接口来定制一种文件访问的机制(该机制叫存储引擎)。

数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

SQL的执行过程:数据库通常不会被单独使用,而是由其它编程语言通过SQL支持接口调用MySQL,由MySQL处理并返回执行结果。首先,其它编程语言通过SQL支持接口调用MySQL,MySQL收到请求后,会将该请求暂时放
在连接池,并由管理服务与工具进行管理。当该请求从等待队列进入到处理队列时,管理器会将该请求传给SQL接口,SQL接口接收到请求后,它会将请求进行hash处理并与缓存中的数据进行对比,如果匹配则通过缓存直
接返回处理结果;否则,去文件系统查询:由SQL接口传给后面的解析器,解析器会判断SQL语句是否正确,若正确则将其转化为数据结构。解析器处理完毕后,便将处理后的请求传给优化器控制器,它会产生多种执行计
划,最终数据库会选择最优的方案去执行。确定最优执行计划后,SQL语句交由存储引擎处理,存储引擎将会到文件系统中取得相应的数据,并原路返回。