MySQL系列之体系结构原理学习笔记
引用来自官网的图,MySQL Server架构从上到下依次为网络连接层(Connectors)、服务层(MySQL Server)、存储引擎层(Plugable Storage Engines)、系统文件层(File System)
中文图示:
画思维导图:
这一层是MySQL的核心组件,主要包括系统管理和控制工具(Management Services&Utilities)、连接池(Connection Pool)、SQL接口(SQL Interface)、解析器(Parser)、查询解析器(Optimizer)、缓存(Cache&Buffer)
负责存储和管理客户端与数据库的连接,一个线程管理一个连接
系统管理和控制工具负责备份恢复、安全管理、集群管理等
用于接受客户端发送的各种SQL命令,并且返回用户需要查询的结 果。比如DML、DDL、存储过程、视图、触发器等。
负责将请求的SQL解析生成一个"解析树",然后根据一些MySQL规则进一步检查解析树是否合法
当“解析树”通过解析器语法检查后,再通过优化器将其转化成执行计划,然后与存储引擎交互
MySQL的缓存机制由多部分组成,比如表缓存,记录缓存,权限缓存,引擎缓存等,查询语句一般先查缓存,缓存查不到才会进行处理,缓存的目的是避免硬解析,提供系统性能
Mysql架构的存储引擎是设计得很灵活的,是一种Plugable的,可以支持拓展的,比如阿里内部就自行进行拓展以适应高并发,详情可以了解一下alisql
Mysql的事务回滚等处理是给存储引擎负责的,下面介绍一下几种常见的MySQL存储引擎:
对比项 | MyISAM | InnoDB |
---|---|---|
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 使用表锁,操作一条记录就会锁住整张表,不适合做高并发操作 | 使用行锁,操作记录,只锁一行记录,适合做高并发处理 |
表空间 | 相对比较小 | 相对比较大 |
修改存储引擎SQL:
ALTER TABLE mytable ENGINE = InnoDB;
系统文件层负责将数据库的数据和日志存储在文件系统,并完成与存储引擎的交互,主要包含日志文件,数据文件,配置文件,pid 文件,socket 文件等
show variables like '%log_error%';
show variables like '%general%';
查询是否开启二进制日志:
二进制日志参数查看:
show variables like '%slow_query%';
, 查询时长:show variables like '%long_query_time%';
要开启慢查询日志,可以通过两种方法:一种是修改mysql,my.ini配置文件: [mysqld] slow_query_log =1 slow_query_log_file=/usr/local/mysql/data/localhost-slow.log 另外一种是通过sql命令: // 开启慢查询日志 mysql> SET GLOBAL slow_query_log=ON; Query OK, 0 rows affected (0.05 sec) //设置慢查询超时时间 mysql> SET GLOBAL long_query_time=3; Query OK, 0 rows affected (0.00 sec)
my.ini配置文件:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir="D:\mysql-8.0.13-winx64"
# 设置mysql数据库的数据的存放目录
datadir="D:\mysql-8.0.13-winx64\data"
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#log-bin=ON
binlog-format=ROW
log-bin=mysqlbinlog
mysql数据文件,用于保存表数据等等,可以通过配置my.ini配置存放路径:datadir="D:\mysql-8.0.13-winx64\data"
新建一个数据库之后,如果是 InnoDB引擎的,新建一张表就新建对应的ibd文件,命名为:表名.ibd
InnoDB 存储引擎有两种表空间方式:独享表空间和共享表空间。独享表空间使用 .ibd 文件来存放数据,每一张 表对应一个 .ibd 文件。共享表空间使用 .ibdata 文件,所有表共同使用一个或多个.ibdata 文件