本文将详细解释如何分析MySQL架构。文章内容质量很高,我就分享给大家作为参考。希望大家看完这篇文章后对相关知识有一定的了解。
要了解mysql的运行机制,首先要对mysql的架构有一定的了解。
由于最近的一些事件,我受到了很大的打击,我觉得我可能会更加努力,我的职业生涯也会是这样。因此,我突然失去了原来学习技术和写博客的热情。
但无论如何,我自己选择了这条路,哭着也要走完。另外,目前似乎没有别的路可走。
mysql体系结构
mysql的架构如图所示。可以看出,MySQL由以下几个部分组成:
连接池组件
管理服务和工具组件。
SQL接口组件
查询分析器组件
优化器组件
缓存组件。
插入式存储引擎
物理文件
说明:
MySql区别于其他数据库的最重要的特性之一是它的插件式的表存储引擎.
需要注意:
存储引擎是基于表的,而不是基于数据库。
基于这样的特点,项目中的大部分业务数据库都需要支持事务属性,因此采用了InnoDB存储引擎。但是对于那些具有只读特性的表,我们可以考虑使用MyISAM存储引擎,这样不会破坏数据库的事务特性。
详细说明
的顶层是连接组件。以下服务器由连接池、管理工具和服务、SQL接口、解析器、优化器、缓存、存储引擎和文件系统组成。
连接池:由于每次设置都要花费很多时间,连接池的功能就是缓存这些连接,建立的连接下次可以直接使用,提高服务器性能。管理工具和服务:系统管控工具,如备份恢复、Mysql复制、集群等。SQL接口:接受用户的SQL命令,并返回用户需要查询的结果。例如,从调用SQL接口查询解析器:的方式中选择。当SQL命令被传递给解析器时,它将被解析器验证和解析(权限、语法结构)。
主要功能:
A.将SQL语句分解成一个数据结构,并将这个结构传递给后续的步骤,然后SQL语句的传输和处理就是基于这个结构。
B.如果在分解和组合中遇到错误,那么这个sql语句就是不合理的查询优化器:查询优化器,它将用于在查询之前优化查询。他用“选取-投影-联接”策略来质疑。
可以通过一个例子来理解:选择uid,从性别=1的用户中选择名称;
这个select查询首先根据where语句进行选择,而不是先查询所有的表,然后执行性别过滤。
在这个选择查询中,属性首先根据uid和名称进行投影,而不是在取出所有属性后进行过滤。
结合这两个查询条件,生成最终的查询结果。
此外,查询优化器还可以控制sql语句查询哪个索引,并自动调整sql语句中where条件的顺序,以满足复合索引最左侧匹配原则的规则。
缓存器:查询缓存。如果查询缓存中有命中查询结果,查询语句可以直接从查询缓存中获取数据。
LRU算法溢出了数据的冷端,将来会及时刷新到磁盘的数据页,称为脏页。
这种缓存机制由一系列小缓存组成。如表缓存、记录缓存、关键字缓存、权限缓存等。
不建议将缓存用于MySQL查询,因为在实际业务场景中,查询缓存失效可能非常频繁。如果更新表,表中的所有查询缓存都将被清空。
因此,我们通常不建议在大多数情况下使用查询缓存。
MySQL版本后,删除了缓存功能,官方认为这个功能在实际应用场景中并不多见,所以干脆删除了。
MySQL 8.0 版本后移除:说白了,存储引擎就是一种如何管理运营数据(存储数据、如何更新、查询数据等)的方法。).因为关系数据库中的数据是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作这个表的类型)。
>物理文件:
物理文件包括:日志文件,数据文件,配置文件,pid文件,socket文件等
一个查询语句的执行流程
说了以上这么多,那么究竟一条 sql 语句是如何执行的呢?其实我们的 sql 可以分为两种,一种是查询,一种是更新(增加,更新,删除)。我们先分析下查询语句,语句如下:
select * from tb_student A where A.age='18' and A.name=' 张三 ';
结合上面的说明,我们分析下这个语句的执行流程:
1、建立连接
2、调用sql接口
3、鉴权:先检查该语句是否有权限,如果没有权限,直接返回错误信息
4、缓存判断:如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 sql 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。
5、解析sql语句:
通过分析器进行词法分析,提取 sql 语句的关键元素,比如提取上面这个语句是查询 select,提取需要查询的表名为 tb_student,需要查询所有的列,查询条件是这个表的 id=‘1’。然后判断这个 sql 语句是否有语法错误,比如关键词是否正确等等,如果检查没问题就执行下一步。
6、查询优化对sql语句进行sql
接下来就是优化器进行确定执行方案,上面的 sql 语句,可以有两种执行方案:
a. 先查询学生表中姓名为“张三”的学生,然后判断是否年龄是 18。
b. 先找出学生中年龄 18 岁的学生,然后再查询姓名为“张三”的学生。
那么优化器根据自己的优化算法进行选择执行效率最好的一个方案(优化器认为,有时候不一定最好)。确认了执行计划后就准备开始执行了。
7、执行查询,返回结果
物理文件说明
1、日志文件
error log 错误日志 排错 /var/log/mysqld.log【默认开启】
bin log 二进制日志 备份 增量备份 DDL DML DCL
Relay log 中继日志 复制 接收 replication master
slow log 慢查询日志 调优 查询时间超过指定值
日志文件的默认位置:
Error Log
log-error=/var/log/mysqld.log
Binary Log
log-bin=/var/log/mysql-bin/bin.log
server-id=2 5.7.x版本后
Slow Query Log
slow_query_log=1|0
slow_query_log_file=/var/log/mysql-slow/slow.log
long_query_time=3
2、配置文件
/etc/my.cnf—>/etc/mysql/my.cnf—>/usr/etc/my.cnf—> ~/.my.cnf
如果冲突,以最后一个读取的为准
[mysqld]组中包括了mysqld服务启动时的初始化参数
[client]组中包含着客户端工具程序可以读取的参数,此外还有其他针对各个客户端软件的特定参数组等
3、数据文件
1、.frm文件
不论是什么存储引擎,每一个表都会有一个以表名命名的.frm文件,与表相关的元数据(meta)信息都存放在此文件中,包括表结构的定义信息等。
2、.MYD文件
myisam存储引擎专用,存放myisam表的数据(data)。每一个myisam表都会有一个.MYD文件与之呼应,同样存放在所属数据库的目录下
3、.MYI文件
也是myisam存储引擎专用,存放myisam表的索引相关信息。对于myisam存储引擎来说,可以被缓存(cache)的内容主要就是来源于.MYI文件中。
每一个myisam表对应一个.MYI文件,其存放的位置和.frm及.MYD一样
4、.ibd文件和ibdata文件
存放innoDB的数据文件(包括索引)。innoDB存储引擎有两种表空间方式:独享表空间和共享表空间。
独享表空间:使用.ibd文件来存放数据,且每个表一个.ibd文件,文件存放在和myisam数据相同的位置。
共享表空间:使用.ibdata文件,所有表共同使用一个(或多个,自行配置)ibdata文件。
ibdata1:系统表空间(数据文件)undo 段
ib_logfile0 redlog文件 一组
ib_logfile1
db.opt文件 此文件在每一个自建的库里都会有,记录这个库的默认使用的字符集和校验规。
4、pid文件
pid文件是mysqld应用程序在Unix/Linux环境下的一个进程文件,和许多其他Unix/Linux服务端程序一样,它存放着自己的进程id
5、socket文件
socket文件也是在Unix/Linux环境下才有的,用户在Unix/Linux环境下客户端连接可以不通过TCP/IP网络而直接使用Unix Socket来连接mysql.
数据库、数据库实例、数据库服务器
数据库(database):
操作系统或存储上的数据文件的集合。mysql数据库中,数据库文件可以是* .frm、.MYD、.MYI、*.ibd等结尾的文件,不同存储引擎文件类型不同。
更偏向文件的存储方面。
数据库实例(instance)
由后台进程或者线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。
需要注意:数据库实例才是真正操作数据库的。
更偏向应用操作方面。
数据库和数据库实例的关系:
通常情况下,数据库实例和数据库是一一对应的关系,也就是一个数据库实例对应一个数据库;
但是,在集群环境中存在多个数据库实例共同使用一个数据库。
比如一个数据库里面的表,经过分表策略,可以分散在多个数据库实例中。
数据库实例指的是数据库应用,数据库指的是在数据库实例上面创建的database。
比如在服务器上部署了一个3306端口的mysql应用,那么就是一个数据库实例;
如果继续部署一个3309的mysql应用,那么就是在一个服务上部署了2个msql的实例。
在3306端口的mysql实例上,创建一个名为order的database,就是创建了一个数据库。
数据库服务器(database server)
部署安装数据库实例的服务器。
总结
1、mysql体系结构,主要包括连接池组件、管理服务和工具组件
SQL接口组件、查询分析器组件、优化器组件、缓冲(Cache)组件、插件式存储引擎
物理文件。
2、分析一个查询语句的执行过程:建立连接—》权限校验—》查询缓存—》分析器—》优化器—》权限校验—》执行器—》引擎
3、区分数据库、数据库实例、数据库服务器
【开心一刻】
关于怎样分析MySQL体系架构就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/47510.html