Mysql整体架构
MySQL整体架构如下图所示:
MySQL逻辑系统架构分为4层:
- 应用层
- MySQL服务层
- 存储引擎层
- 系统文件层
下面将对各层的功能和组件进行介绍,并探讨一条语句的执行过程。
应用层
应用层是MySQL体系架构的最上层,它处理与客户端的交互,主要包含连接处理、用户鉴权和安全管理。
- 连接处理:负责管理客户端与MySQL服务器之间的连接。它管理连接的建立、维护和关闭,并分配和释放连接资源以提高性能和可扩展性。
- 用户鉴权:用于验证客户端的身份。MySQL支持多种身份验证方法,如基于用户名和密码的验证、SSL/TLS证书验证等,以提高数据的安全性。
- 安全管理:涉及访问控制、权限管理和数据加密等措施。它定义用户的权限和访问级别,并防止未经授权的访问、网络攻击和数据泄露。
MySQL 服务层
该层是MySQL Server的核心层,提供了MySQL Server数据库系统的所有逻辑功能,该层可以分为如下不同的组件:
- NoSQL Interface(NoSQL 接口)
- SQL Interface(SQL 接口)
- SQL Parser(SQL 解析器)
- Optimizer (查询优化器)
- Caches & buffers(缓存)
-
NoSQL Interface(NoSQL 接口):通过NoSQL接口,MySQL Server可以像操作关系型数据一样操作非结构化数据,而不需要遵循传统的表格和列的模式。
-
SQL Interface(SQL 接口) SQL接口,接收用户的SQL命令并进行处理,得到用户所需要的结果,具体处理功能如下:
- Data Manipulation Language (DML).
- Data Definition Language (DDL).
- 存储过程
- 视图
- 触发器
-
SQL Parser(SQL 解析器) 解析器的作用主要是解析查询语句,最终生成语法树。首先解析器会对查询语句进行语法分析,如果语句语法有错误,则返回相应的错误信息。语法检查通过后,解析器会查询缓存,如果缓存中有对应的语句,就直接返回结果不进行接下来的优化执行操作。
-
Optimizer(查询优化器) 优化器的作用主要是对查询语句进行优化,包括选择合适的索引,数据的读取方式。
-
Caches & buffers(缓存) 包括全局和引擎特定的缓存,提高查询的效率。如果查询缓存中有命中的查询结果,则查询语句就可以从缓存中取数据,无须再通过解析和执行。这个缓存机制是由一系列小缓存组成,如表缓存、记录缓存、key缓存、权限缓存等。查询缓存默认是关闭的,可以通过
set query_cache_type=1开启。
存储引擎层
存储引擎是MySQL中具体与文件打交道的子系统,也是MySQL最有特色的地方。MySQL区别于其他数据库的最重要特点是其插件式的表存储引擎。常用的四种存储引擎分别是:
- MyISAM存储引擎
- innoDB存储引擎
- MEMORY存储引擎
- ARCHIVE存储引擎
MySQL将这些存储引擎提供为可插拔的,可以在表级别使用各种存储引擎。一个数据库可以包含使用多个存储引擎的表。"SHOW ENGINES"命令将列出服务器支持的所有存储引擎。
mysql>SHOW ENGINES;
几种存储引擎的对比:
| 功能 | MYISAM | Memory | InnoDB | Archive |
|---|---|---|---|---|
| 存储限制 | 256TB | RAM | 64TB | None |
| 支持事物 | No | No | Yes | No |
| 支持全文索引 | Yes | No | No | No |
| 支持数索引 | Yes | Yes | Yes | No |
| 支持哈希索引 | No | Yes | No | No |
| 支持数据缓存 | No | N/A | Yes | No |
| 支持外键 | No | No | Yes | No |
InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率
MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果
Archive:如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用。
注意,同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。
物理文件层
物理文件包括:redolog、undolog、binlog、errorlog、querylog、slowlog、data、index等 MySQL的物理文件层包括以下文件:
- Redo log:用于事务的持久性和故障恢复,确保在发生故障时数据的一致性。
- Undo log:存储撤消日志,支持事务的回滚和多版本并发控制。
- Binlog:二进制日志,用于主从复制和数据恢复。
- 数据文件:存储表的数据和索引,不同存储引擎使用不同的数据文件格式。
- 表定义文件:存储表的元数据信息,包括表结构、字段定义、索引信息等。
- 参数文件:用于配置MySQL服务器的参数和选项。
- 锁文件:记录正在使用的表的锁信息。
- 错误日志文件:记录MySQL服务器的错误和警告信息。
- 查询日志文件:记录MySQL服务器接收到的查询语句。
- 慢查询日志文件:记录执行时间超过阈值的查询语句。
- 临时文件:存储临时数据和排序操作的中间结果。
- 其他日志文件:包括日志文件组合、日志索引文件等。
这些物理文件在MySQL中起着不同的作用,支持数据库的正常运行、故障恢复、备份和数据复制等功能。 需要注意的是,MySQL的物理文件层是存储引擎特定的,不同存储引擎可能使用不同的文件格式和组织方式。因此,具体的文件类型和文件组织方式可能因存储引擎而异。
一条语句的执行过程
结合整体架构,一条语句的执行过程如下所示: