关于mysql:MySqlsql语句执行流程

MySql外部组件构造

Server层

连接器

治理连贯与权限校验
连贯数据库时负责监听数据库端口申请的便是连接器。
连贯命令如下所示:
# mysql ‐h host[数据库地址] ‐u root[用户] ‐p root[明码] ‐P 3306
连贯命令中的 mysql 是客户端工具,用来跟服务端建设连贯。在实现经典的 TCP 握手后,连接器就要开始认证你的身份,
这个时候用的就是你输出的用户名和明码。
1、如果用户名或明码不对,你就会收到一个"Access denied for user"的谬误,而后客户端程序完结执行。
2、如果用户名明码认证通过,连接器会到权限表外面查出你领有的权限。之后,这个连贯外面的权限判断逻辑,都将依赖于此时读到的权
限。
这就意味着,一个用户胜利建设连贯后,权限会缓存在一个seesion中,此时即便你用管理员账号对这个用户的权限做了批改,也不会影响曾经存在连贯的权
限。批改实现后,只有再新建的连贯才会应用新的权限设置。用户的权限表在零碎表空间的mysql的user表中。

查问缓存

一个特地鸡肋的存在,就是把查问后果放在缓存里,下次有同样的sql间接从缓存中取数据,但对缓存数据所关联的表的任何批改都会导致缓存被清空,只有在变动简直没有的动态表有存在价值,8.0当前的mysql曾经移除了查问缓存

语法分析器

如果没有命中缓存,那么mysql行将开始剖析输出的sql语句,依据sql语句的关键字和语句构造对sql进行拆分,辨认出SQL的目标。
词法分析器分成6个次要步骤实现对sql语句的剖析
1、词法剖析
2、语法分析
3、语义剖析
4、结构执行树
5、生成执行打算
6、打算的执行

SQL语句的剖析分为词法剖析与语法分析,mysql的词法剖析由MySQLLex[MySQL本人实现的]实现,语法分析由Bison生
成,通过bison语法分析之后,会生成一个这样的语法树

优化器

通过了分析器,MySQL 就晓得你要做什么了。在开始执行之前,还要先通过优化器的解决。
优化器是在表外面有多个索引的时候,决定应用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连贯程序。
如果有多种计划最终的执行后果是雷同的,那么优化器会抉择一个执行效率更高的计划。

执行器

优化过后mysql就曾经确定了该sql语句的目标,开始执行过程之前会先进行权限判断,如果权限没有问题则开表执行,否则返回错误信息。
执行过程依据表的存储引擎类型去调用引擎提供的接口,例如innoDB等存储引擎。

store层

mysql的store层比拟罕用的有三种
innoDB,Myisam,memory

bin-log归档

mysql的binlog是Server层实现的二进制日志,他会记录咱们的cud操作,特点如下:
1、Binlog在Server层实现(引擎共用)
2、Binlog为逻辑日志,记录的是一条语句的原始逻辑
3、Binlog不限大小,追加写入,不会笼罩以前的日志
误删数据/库,能够应用binlog进行归档复原!
但须要先开启MySQL的binlog性能。
配置my.cnf开启binlog
log‐bin=/usr/local/mysql/data/binlog/mysql‐bin
binlog‐format=ROW
sync‐binlog=1

留神5.7以及更高版本须要配置本项:server‐id=123454(自定义,保障唯一性);
 #binlog格局,有3种statement,row,mixed,statement示意存储执行的sql语句,分布式的时候有可能造成数据不统一;row示意存储的是sql执行后最终的数据后果,但会影响效率;mixed是前两种的合体,效率最低。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理