# Mysql学习(一)——Mysql基本体系结构
Mysql体系图:

Mysql从上到下基本可以分为四层,分别是网络连接层、服务层、引擎层、文件层
**1、网络连接层**:
- 主要使用客户端连接器,支持现在主流的服务端编程技术,用于与mysql服务器建立连接
**2、服务层**:
服务层是mysql的核心层,这里主要有6个部分,分别为:
- **连接池**,负责管理客户端和服务端的连接
- **系统管理和控制工具**,主要用于备份恢复,安全管理等
- **Sql接口**,主要用于接受客户端的sql语句,并返回对应的结果
- **解析器**,主要用于解析sql,将sql语句解析成一棵语法树,并对mysql的语法进行检查。
- **优化器**:解析器将解析后的数据,交由优化器将其转化为执行计划,然后与存储引擎进行交互
3、**存储引擎层**:
- 存储引擎主要负责Mysql中数据的存储和提取,他会与底层系统的文件进行交互。Mysql存储引擎是可插拔式的,可以在不同的表中使用不同的存储引擎
- 常见的Mysql引擎有InnoDB,MyISAM,Memory
4、**文件系统**:
主要讲数据库的数据和日志存储在文件中,并完成与存储殷勤的交互,是文件的物理存储层,主要存储有:日志文件、数据文件、配置文件、pid文件等
- **日志文件**:
- 错误日志(error log)
默认开启错误日志的记录,使用`show variables like '%log_error%'`
- 通用查询日志(General query log)
记录一般的查询语句,使用`show variables like '%general%'`
- 二进制日志(binary log)
主要记录的是数据库执行的更改操作,记录了语句的发生时间,执行时长等,主要用于数据库恢复和主从复制。使用命令
```sql
show variables like '%log_bin%';--是否开启
show variables like '%binlog%';--查看对应参数
show binary logs;--查看日志文件
```
- 慢查询日志(slow query log)
默认记录的是查询超过10秒的sql语句
```sql
show variables like '%slow_query%';--查看是否开启
show variables like '%long_query_time%';--查看对应的时长
```
- **配置文件**:
主要存储mysql的配置文件,比如my.cnf,my.ini
- **数据文件**:
- db.opt文件:记录数据库默认使用的字符集和校验规则
- frm文件:记录表的元数据信息,比如表结构信息等
- MYD文件:MyISAM引擎专用,主要存放了MyISAM表的数据,每一个表都有一个MYD文件
- MYI文件:MyISAM引擎专用,存放MyISAM表的索引相关的信息,每一张MyISAM表对应一个.MYI文件
- ibd文件:存放InnoDB的数据文件(包括索引)
- ibdata1:系统表空间数据文件,存储表的元数据,Undo日志等
- ib_logfile0、ib_logfile1等文件:Redo log日志文件
- **pid文件**:
pid 文件是 mysqld 应用程序在 Unix/Linux 环境下的一个进程文件,和许多其他Unix/Linux 服务端程序一样,它存放着自己的进程 id。
Mysql学习(一)——Mysql基本体系结构