• MySQL的内部组件结构

 

mysql在PREPARE stmt将结果赋值给变量_MySQL

MySQL 可以分为 Server 层和存储引擎层两部分。

Server层 

主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。



Store层



存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB ,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。也就是说如果我们在create table时不指定表的存储引擎类型,默认会给你设置存储引擎为InnoDB。




下面分析连接器、查询缓存、分析器、优化器、执行器等五个部分:

(1)连接器



我们知道由于MySQL是开源的,他有非常多种类的客户端:navicat,mysql front,jdbc,SQLyog等非常丰富的客户端,这些客户端要向mysql发起通信都必须先跟Server端建立通信连接,而建立连接的工作就是有连接器完成的。





(2)查询缓存




常用的一些操作




mysql在PREPARE stmt将结果赋值给变量_mysql_02


大多数情况查询缓存就是个鸡肋,mysql8.0已经移除了查询缓存功能。

(3)分析器


如果没有命中查询缓存,就要开始真正执行语句了。首先,MySQL 需要知道你要做什么,因此需要对 SQL 语句做解析。


分析器先会做“词法分析”。你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。


词法分析器原理

词法分析器分成6个主要步骤完成对sql语句的分析

1、词法分析

2、语法分析

3、语义分析

4、构造执行树

5、生成执行计划

6、计划的执行

下面是SQL词法分析的过程步骤:

mysql在PREPARE stmt将结果赋值给变量_MySQL_03

(4)优化器


经过了分析器,MySQL 就知道你要做什么了。在开始执行之前,还要先经过优化器的处理。


优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。


(5)执行器


开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误, (在工程实现上,如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。查询也会在优化器之前调用 precheck 验证权限)。



bin-log归档


binlog是Server层实现的二进制日志,他会记录我们的cud操作。Binlog有以下几个特点:


1、Binlog在MySQL的Server层实现(引擎共用)


2、Binlog为逻辑日志,记录的是一条语句的原始逻辑


3、Binlog不限大小,追加写入,不会覆盖以前的日志


如果,我们误删了数据库,可以使用binlog进行归档!要使用binlog归档,首先我们得记录binlog,因此需要先开启MySQL的binlog功能。


binlog 三种格式 :

1、statement:记录的是SQL本身的语句

2、row:记录的不是sql原语句,而是替换成了记录event

3、mixed:前面两种格式的混合