MySQL 架构初识| 青训营笔记

90 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

😎 天不生我MySql,编程万古如长夜

1. 层次结构

😎 连接层:主要是数据库连接池,会负责处理所有客户端接入的工作

😎 服务层:主要包含 SQL 接口、解析器、优化器以及缓冲缓存区四块区域

😎 存储引擎层:主要指 MySQL 支持的各大存储引擎,如 InnoDB、MyISAM 等

😎 客户端

2. 网络连接层

😎 MySQL 连接一般基于 TCP/IP 协议进行建立网络连接

😎 工作模式:

① 全双工:双方可在同一时间内,接受、发送数据
② 半双工:同一时刻,要么只能发送数据,要么只能接受数据
③ 单工:当前连接只能发送数据或只能接收数据(单类型通道)

3. 数据库连接池

😎 复用线程,管理线程,限制最大连接数

4. 系统服务层

(1)SQL接口

😎 主要负责处理 sql 语句,作为客户端传递 sql 语句的入口,也是数据库返回数据时的出口

😎 sql 语句类型

① DML:数据库操作语句
② DDL:数据库定义语句
③ DQL:数据库查询语句
④ DCL:数据库控制语句
⑤ TCL:事务控制语句

(2)触发器

😎 存储过程:是指提前编写好的一段较为常用或复杂的SQL语句,然后指定一个名称存储起来,然后先经过编译、优化,完成后,这个“过程”会被嵌入到MySQL中。

😎 说简单一点,[MySQL触发器]就类似于Spring框架中的AOP切面。

(3)解析器

😎 主要是做词法分析、语义分析、语法树生成。

(4)优化器

😎 主要职责在于生成执行计划,比如选择最合适的索引,选择最合适的join方式等,最终会选择出一套最优的执行计划。

(5)缓存 & 缓冲

😎 读取缓冲:主要是 select 语句的数据缓存

😎 写入缓冲:数据放在内存中进行操作,减少磁盘 io

5. 存储引擎层

😎 是MySQL 数据库中 与磁盘文件打交道的 子系统。

6. 文件系统层

😎 数据库的基础,本质上是一个基于机器物理磁盘的一个文件系统(配置文件、库表结构文件、数据文件、索引文件、日志文件),负责数据的最终存储与持久化工作

😎 主要分为两个板块

(1)日志板块

①binlog二进制日志,主要记录MySQL数据库的所有写操作(增删改)。
②redo-log重做/重写日志,MySQL崩溃时,对于未落盘的操作会记录在这里面,用于重启时重新落盘(InnoDB专有的)。
③undo-logs撤销/回滚日志:记录事务开始前[修改数据]的备份,用于回滚事务。
④error-log:错误日志:记录MySQL启动、运行、停止时的错误信息。
⑤general-log常规日志,主要记录MySQL收到的每一个查询或SQL命令。
⑥slow-log:慢查询日志,主要记录执行时间较长的SQL。
⑦relay-log:中继日志,主要用于主从复制做数据拷贝。

(2)数据板块

① db.opt文件:主要记录当前数据库使用的字符集和验证规则等信息。
② .frm文件:存储表结构的元数据信息文件,每张表都会有一个这样的文件。
③ .MYD文件:用于存储表中所有数据的文件(MyISAM引擎独有的)。
④ .MYI文件:用于存储表中索引信息的文件(MyISAM引擎独有的)。
⑤ .ibd文件:用于存储表数据和索引信息的文件(InnoDB引擎独有的)。
⑥ .ibdata文件:用于存储共享表空间的数据和索引的文件(InnoDB引擎独有)。
⑦ .ibdata1文件:这个主要是用于存储MySQL系统(自带)表数据及结构的文件。
⑧ .ib_logfile0/.ib_logfile1文件:用于故障数据恢复时的日志文件。
⑨ .cnf/.ini:MySQL的配置文件,Windows下是.ini,其他系统大多为.cnf。
 ......
 

参考文章(感谢)