撩一撩mysql8.0.15——mysql底层基础

复习复习mysql了,从底层出发的ye~~~~~~

数据库简介

当您想收听最喜欢的歌曲时,可以从智能手机上打开播放列表。在这种情况下,播放列表是数据库就是从数据库中读取出来的。

当您拍摄照片并将其上传到微博,朋友圈等,这样的社交网络中的帐户时,您的照片库就有可能存储在一个数据库中。

当您浏览电子商务网站购买鞋子,衣服等时,您使用购物车就是数据库应用。

数据库无处不在。 那么什么是数据库? 根据定义,数据库只是一个结构化的数据集合。

数据本质上相互关联,例如,产品属于产品类别并与多个标签相关联。这就是为什么要使用关系数据库。

在关系数据库中,我们使用表对产品,类别,标签等数据进行建模。 表包含列和行。它就像一个电子表格(Excel)。

表可以涉及的使用有:一对一,一对多,多对一关系等关系。

因为我们要处理大量的数据,所以需要一种方法来定义数据库,表等,并更有效地处理数据。 另外,我们可以将数据转换成数据信息。

所以就需要SQL来处理了。


MySQL是什么?

My是MySQL的联合创始人 - Monty Widenius 的女儿的名字。MySQL是MySQL的组合,这就是MySQL命名的由来。

MySQL的官方网址: http://www.mysql.com/ ,MySQL的社区版本下载地址为: http://dev.mysql.com/downloads/mysql/ ,在写本文时,当前的MySQL最新版本是:5.7.18

MySQL是一个数据库管理系统,也是一个关系数据库。它是由Oracle支持的开源软件。这意味着任何一个人都可以使用MySQL而不用支付一毛钱。 另外,如果需要,还可以更改其源代码或进行二次开发以满足您的需要。

即使MySQL是开源软件,但是可以从Oracle购买商业许可证版本,以获得高级支持服务(特殊企业用户需要)。

与其他数据库软件(如Oracle数据库或Microsoft SQL Server)相比,MySQL非常容易学习和掌握。

MySQL可以在各种平台上运行UNIX,Linux,Windows等。可以将其安装在服务器甚至桌面系统上。 此外,MySQL是可靠,可扩展和快速的。

如果您开发网站或Web应用程序,MySQL是一个不错的选择(强烈建议使用)。MySQL是LAMP堆栈的重要组成部分,包括Linux,Apache,MySQL和PHP。


mysql架构模型

1:连接层

最上层就是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信,主要完成一些类似于连接处理,授权认证,及相关解决方案,在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全连接。服务器也会为安全接入的每个客户端验证所具有的操作权限

管理缓冲用户连接,线程处理等需要缓存的需求。负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信,接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。

2:服务层

第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存查询,SQL的分析和优化及部分内置函数的执行,所有的跨存储引擎的功能也在这一层实现,如过程,函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的的执行操作。如果是select语句,服务器还会查询内部的缓存。如果缓存空间足够打,这样在解决大量读操作的环境中能够很好的提升系统的性能。

    SQL Interface:

      SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

    Parser: 解析器。

SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。在 MySQL中我们习惯将所有 Client 端发送给 Server 端的命令都称为 query ,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后,会直接将该 query 传递给专门负责将各种 Query 进行分类然后转发给各个对应的处理模块。

主要功能:

a . 将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。

b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的

Optimizer: 查询优化器。

SQL语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端请求的 query(sql语句) ,根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果他使用的是“选取-投影-联接”策略进行查询。
用一个例子就可以理解: select uid,name from user where gender = 1;
这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤
这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤
将这两个查询条件联接起来生成最终查询结果

Cache和Buffer: 查询缓存。

他的主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做
一个对应。该 Query 所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。

如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等

 

3:引擎层

存储引擎层真正负责了mysql中数据的存储和读取,服务器通过API与存储引擎进行通信,不同的存储引擎具有的功能不同,这样我们就可以根据自己的实际需要进行选取。

这里常用的引擎有另外一篇文章涉及到。

4:存储层

主要是将数据存储在运行于裸设备的文件系统之上,并完成于存储引擎的交互

 
 
 

安装后的Mysql文件形式

以mysql8.0.15为例,不同的存储引擎有不同的数据文件存放方式

除了必有的.frm文件,根据MySQL所使用的存储引擎的不同(MySQL常用的两个存储引擎是MyISAM和InnoDB),存储引擎会创建各自不同的数据库文件。

2、MyISAM数据库表文件:

.MYD文件:即MY Data,表数据文件

.MYI文件:即MY Index,索引文件

.log文件:日志文件

3、InnoDB采用表空间(tablespace)来管理数据,存储表数据和索引,

InnoDB数据库文件(即InnoDB文件集,ib-file set):

ibdata1、ibdata2等:系统表空间文件,存储InnoDB系统信息和用户数据库表数据和索引,所有表共用

.ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引

日志文件: ib_logfile1、ib_logfile2

4在/var/lib/mysql下:有我们创建的mysql数据库

5/usr/share/mysql:配置文件目录,有server命令

6/usr/bin:相关命令目录

7/etc/init.d/mysql:启停相关脚本

8.0.15的RPM安装这个目录没有

my.cnf配置文件

发布了66 篇原创文章 · 获赞 31 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43272605/article/details/104041467