MySQL 由连接池、SQL 接口、解析器、优化器、缓存、存储引擎等组成,可以分为三层。Server 层、SQL层、存储引擎层、文件系统层
|
一、客户端连接器
二、Server层(连接层)
三、SQL层
四、存储引擎
五、文件系统层
上图中,连接池 为连接层,系统管理和控制工具 & SQL接口& 解析器&查询优化器&缓存为 SQL 层, 可插拔存储引擎为存储引擎层,系统文件、文件和日志s为文件系统层。
客户端连接器不属于以上任何一层,可以将客户端连接器 理解为各种客户端、应用服务,主要指的是不同语言与 SQL 的交互。
返回顶部目录
应用程序通过接口(如 ODBC、JDBC)来连接 MySQL,最先连接处理的是连接层。连接层包括通信协议、线程处理、用户名密码认证 3 部分。
1)通信协议负责检测客户端版本是否兼容 MySQL 服务端。
2)线程处理是指每一个连接请求都会分配一个对应的线程,相当于一条 SQL 对应一个线程,一个线程对应一个逻辑 CPU,在多个逻辑 CPU 之间进行切换。
3)密码认证用来验证用户创建的账号、密码,以及 host 主机授权是否可以连接到 MySQL 服务器。
Connection Pool(连接池)属于连接层。由于每次建立连接都需要消耗很多时间,连接池的作用就是将用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。
返回顶部目录
SQL 层是 MySQL 的核心,MySQL 的核心服务都是在这层实现的。主要包含权限判断、查询缓存、解析器、预处理、查询优化器、缓存和执行计划。
1)权限判断可以审核用户有没有访问某个库、某个表,或者表里某行数据的权限。
2)查询缓存通过 Query Cache 进行操作,如果数据在 Query Cache 中,则直接返回结果给客户端,不必再进行查询解析、优化和执行等过程。(从mysql 8开始,由于并发会引发很大问题,查询缓存被去掉了。可以使用redis代替,比在这个地方用好多了)
3)查询解析器针对 SQL 语句进行解析,判断语法是否正确。
4)预处理器对解析器无法解析的语义进行处理。
5)查询优化器对 SQL 进行改写和相应的优化,并生成最优的执行计划,就可以调用程序的 API 接口,通过存储引擎层访问数据。
返回顶部目录
InnoDB:InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能,也是目前MySQL默认的存储引擎。
MyISAM:这种引擎是mysql最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能。
Memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。
返回顶部目录
文件系统层主要是将数据库的数据存储在操作系统的文件系统之上,并完成与存储引擎的交互。
数据库层面:
参数文件 my.cnf ,
错误日志 error.log
慢查询日志 slow.log
全量日志 general log
二进制日志文件 binlog
审计日志 andit log
中继日志 relay log
套接字文件 socket
进程文件 pid
表结构文件
存储引擎层面:
redo log 又称为重做日志
undo log 用于撤销回退的日志,记录事务执行前后行数据的历史记录。(这两个都是InnoDB独有的)
返回顶部目录