MySQL之3---体系结构

MySQL之3---体系结构

名词介绍

C/S(客户端/服务端)模型介绍

img

  • Clinet : mysql mysqldump ,sqlyog,API

  • Server : mysqld 守护进程

连接方式:

  1. TCP/IP方式(远程、本地)

    mysql -uroot -p123 -h 10.0.0.51 -P3306
    
  2. Socket方式(仅本地)

    mysql -uroot -p123 -S /tmp/mysql.sock
    

实例(instance)

实例: mysqld + 线程(Master thread , IO ,SQL ,purge...) + 预分配内存(数据日志线程)
公司: boss   + 员工(总经理+普通员工)                     + 办公室

文件结构

配置文件

  • datadir/auto.cnf: 存放自动配置的MySQL Server UUID
  • my.cnf: MySQL的配置文件

其他重要文件

  • -basedir=dir_name: MySQL安装的二进制文件目录
  • -datadir=dir_name: MySQL的数据目录
  • -pid-file=file_name: MySQL进程ID存放文件
  • -log-error=file_name: MySQL错误日志文件

逻辑体系架构

img

img

img

MySQL逻辑系统架构分为3层:

  • 连接层
  • SQL层
  • 存储引擎层

连接层

连接层是MySQL体系架构的最上层,和其他C/S架构一样,主要包含如下内容:

  • 连接处理
  • 身份验证
  • 安全管理

1. 连接处理

当一个客户端向服务端发送连接请求后,MySQL server会从线程池中分配一个线程来和客户端进行连接,以后该客户端的请求都会被分配到该线程上。MySQL Server为了提高性能,提供了线程池(Connection Pool),减少了创建线程和释放线程所花费的时间。

  • 提供连接协议:TCP/IP 、SOCKET
  • 提供专用连接线程:接收用户SQL,返回结果

2. 身份验证

当客户端向MySQL服务端发起连接请求后,MySQL server会对发起连接的用户进行认证(Authenticate),依据是:用户名,客户端主机地址和用户密码。对于使用了SSL(安全套接字层)的连接,还使用了X.509证书。

  • 提供验证:用户,密码,IP、SOCKET

3. 安全管理

当客户连接到MySQL server后,MySQL server会根据用户的权限来判断用户具体可执行哪些操作。MySQL 提供的部分权限的如下:

mysql> show privileges G;
*************************** 1. row ***************************
Privilege: Alter
  Context: Tables
  Comment: To alter the table
*************************** 2. row ***************************
Privilege: Alter routine
  Context: Functions,Procedures
  Comment: To alter or drop stored functions/procedures
*************************** 3. row ***************************
Privilege: Create
  Context: Databases,Tables,Indexes
  Comment: To create new databases and tables

SQL 层

该层是MySQL Server的核心层,通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视图等。提供了MySQL Server数据库系统的所有逻辑功能,该层可以分为如下不同的组件:

  • MySQL Management Server & utilities(系统管理和控制工具)
  • SQL Interface(接口)
  • SQL Parser(解析器)
  • Optimizer (查询优化器)
  • Caches & buffers(缓存)

1. MySQL Management Server & utilities(系统管理和控制工具)

提供了丰富的数据库管理功能,具体如下:

  • 数据库备份和恢复
  • 数据库安全管理,如用户及权限管理
  • 数据库复制管理
  • 数据库集群管理
  • 数据库分区,分库,分表管理
  • 数据库元数据管理

2. SQL Interface(接口)

SQL接口,接收用户的SQL命令并进行处理,得到用户所需要的结果,具体处理功能如下:

  • Data Manipulation Language (DML).
  • Data Definition Language (DDL).
  • 存储过程
  • 视图
  • 触发器

3. SQL Parser(解析器)

解析器的作用主要是解析查询语句,最终生成语法树。首先解析器会对查询语句进行语法分析,如果语句语法有错误,则返回相应的错误信息。语法检查通过后,解析器会查询缓存,如果缓存中有对应的语句,就直接返回结果不进行接下来的优化执行操作。

注:缓存中数据被修改,会被清出缓存。

4. Optimizer(查询优化器)

优化器的作用主要是对查询语句进行优化,包括选择合适的索引,数据的读取方式,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个查询语句的结果。

5. Caches & buffers(缓存)

包括全局和引擎特定的缓存,提高查询的效率。如果查询缓存中有命中的查询结果,则查询语句就可以从缓存中取数据,无须再通过解析和执行。这个缓存机制是由一系列小缓存组成,如表缓存、记录缓存、key缓存、权限缓存等。


存储引擎层

1. 存储引擎(engine)

存储引擎是MySQL中具体与文件打交道的子系统,类似于Linux中的文件系统。MySQL区别于其他数据库的最重要特点是其插件式的表存储引擎。他根据MySQL公司提供的文件访问层抽象接口来定制一种文件访问的机制(该机制叫存储引擎)。

负责根据SQL层执行的结果,从磁盘上拿数据。将16进制的磁盘数据,交由SQL结构化成表,再通过连接层的专用线程返回给用户。

注意:存储引擎是基于表的,而不是数据库。

2. 物理文件

物理文件包括:redolog、undolog、binlog、errorlog、querylog、slowlog、data、index等


查询的执行路径

img

MySQL 查询执行过程大致步骤 :

  1. 客户端向 MySQL 服务器发送一条查询请求
  2. 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果,否则进入下一阶段
  3. 服务器进行 SQL解析、预处理、再由优化器生成对应的执行计划
  4. MySQL 根据执行计划,调用存储引擎的 API来执行查询
  5. 将结果返回给客户端,同时缓存查询结果

SQL层执行顺序(重点)

(1)接收上层传送的SQL语句
(2)语法验证模块:验证语句语法,是否满足SQL_MODE
(3)语义检查:判断SQL语句的类型
DDL :数据定义语言
DCL :数据控制语言
DML :数据操作语言
DQL :数据查询语言
...
(4)权限检查:用户对库表有没有权限
(5)解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案.
(6)优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划
代价模型:资源(CPU IO MEM)的耗损评估性能好坏
(7)执行器:根据最优执行计划,执行SQL语句,产生执行结果
执行结果:在磁盘的xxxx位置上
(8)提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能
(9)提供日志记录(日志管理章节):binlog,默认是没开启的。

image-20201103213905075


存储结构和逻辑结构的对比

img

库:库名+库属性(字符集, 校对规则)

表:表名+列+行+表属性

  • 列:列名(字段),列属性(数据类型,约束等)
  • 行:数据行(记录)

存储结构

img


用文件系统的目录来存储

MySQL系统数据库:

  • mysql:是mysql的核心数据库,类似于Sql Server中的master库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息
  • performance_schema:MySQL 5.5新增,主要用于收集数据库服务器性能参数,库里表的存储引擎均为PERFORMANCE_SCHEMA,用户不能创建存储引擎为PERFORMANCE_SCHEMA的表
  • information_schema:MySQL 5.0新增,一个物理上并不存在的虚拟数据库,类似于“数据字典”,提供了访问数据库元数据的方式,即数据的数据。比如数据库名或表名,列类型,访问权限(更加细化的访问方式)

MyISAM的表:

-rw-r----- 1 mysql mysql   10816 Apr 18 11:37 user.frm
-rw-r----- 1 mysql mysql     396 Apr 18 12:20  user.MYD
-rw-r----- 1 mysql mysql    4096 Apr 18 14:48 user.MYI

InnoDB的表(8.0之前):

-rw-r----- 1 mysql mysql    8636 Apr 18 11:37 time_zone.frm
-rw-r----- 1 mysql mysql   98304 Apr 18 11:37 time_zone.ibd

time_zone.frm:存储列相关信息
time_zone.ibd:数据行+索引

InnoDB限制

5.6

5.7

8.0

表的段、区、页:

段:一个表就是一个段,包含一个或多个区
区(extents):64个连续的页,默认大小1M
页(pages):最小的存储单元,默认大小16k
原文地址:https://www.cnblogs.com/backups/p/mysql_3.html