博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 基础知识——配置文件、逻辑架构、存储引擎
阅读量:2454 次
发布时间:2019-05-10

本文共 2822 字,大约阅读时间需要 9 分钟。

配置文件

二进制日志log-bin

用于主从复制

错误日志log-error

默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等。

查询日志log

默认关闭,记录查询的sql语句,如果开启会减低mysql的整体性能,因为记录日志也是需要消耗系统资源的

数据文件

frm文件

存放表结构

myd文件

存放表数据

myi文件

存放表索引

逻辑架构

 

 

和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。

  1. Connectors 指的是不同语言中与SQL的交互

  2. Management Serveices & Utilities: 系统管理和控制工具

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

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

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

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

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

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

  7. Cache和Buffer: 查询缓存。 他的主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做一个对应。该 Query 所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。 如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等

  8. 存储引擎接口 存储引擎接口模块可以说是 MySQL 数据库中最有特色的一点了。目前各种数据库产品中,基本上只有 MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特色。 从图2还可以看出,MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。 注意:存储引擎是基于表的,而不是数据库。

四层结构

1.连接层

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

2.服务层

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

3.引擎层

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

4.存储层

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

存储引擎

# 查看支持的存储引擎shwo engines;# 查看当前使用的存储引擎show variables like '%storage_engine%';

MyISAM和InnoDB对比

对比项 MyISAM InnoDB
主外键 不支持 支持
事务 不支持 支持
行表锁 表锁,即使一次操作也会锁住整个表,不适合高并发的操作 行锁,操作时只锁定某一行,不对其他行有影响。适合高并发操作
缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真是数据,对内存要求较高,而且内存大小对性能有决定性的影响
表空间
关注点 性能 事务
默认安装 Y Y

转载地址:http://jqbhb.baihongyu.com/

你可能感兴趣的文章
JavaScript中的pipe()和compose()快速介绍
查看>>
react中的状态机_使用状态机增强您的React
查看>>
ruby 数组删除部分数组_您需要了解的六个Ruby数组方法
查看>>
roro cam_现代JavaScript中的优雅图案:RORO
查看>>
React Router v4简介及其对路由的哲学
查看>>
程序自动化 linux_自动化Windows子系统Linux安装程序
查看>>
react获取api_使用React和WordPress API在您的网站上获取博客
查看>>
可视化编程语言_可视化编程语言影响图
查看>>
framer x使用教程_如何使用Framer Motion将交互式动画和页面过渡添加到Next.js Web应用程序
查看>>
如何成为软件工程师的团队合作者
查看>>
快排递归非递归python_Python递归神经网络终极指南
查看>>
如何使用Next.js创建动态的Rick and Morty Wiki Web App
查看>>
aol dataset_AOL Mail – AOL Mail登录教程,以及如何创建一个免费的AOL.com电子邮件帐户
查看>>
react入门代码_如何在React中构建温度控制应用程序-包括提示和入门代码
查看>>
vlookup示例_VLOOKUP示例–如何在Excel中执行VLOOKUP
查看>>
Excel VBA教程–如何使用Visual Basic在电子表格中编写代码
查看>>
电子邮件传输的内容_电子邮件标题中有什么内容,为什么要关注?
查看>>
微软hackathon_武汉Hackathon的黑客之路–开发人员如何抗击COVID-19
查看>>
服务器云ide_语言服务器协议如何影响IDE的未来
查看>>
华为技术面试编码题_最佳技术编码面试准备书
查看>>