MySQL是最流行的关系型数据库软件之一,由于其体量小、速度快、开源免费、简单易用、维护成本低等,在季军架构中易于扩展、高可用等优势,深受开发者和企业的欢迎,在互联网行业广泛使用。

  其系统架构如下:

    

  MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。

  1、网络连接层

  2、服务层

    服务层是MySQL Server的核心,主要包含系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存六个部分:

    1)连接池:负责存储和管理客户端与数据库的链接,一个线程负责管理一个连接。

    2)系统管理和控制工具:例如备份恢复、安全管理、集群管理等。

    3)SQL接口:用于接受客户端发送的各种SQL命令,并且返回用户需要查询的结果。比如DML、DDL、存储过程、视图、触发器等。

    4)解析器:负责将请求的SQL解析生成一个“解析树”。然后根据一些MySQL规则进一步检查解析树是否合法。

    5)查询优化器:当“解析树”通过解析器语法检查后,交优化器将其转化成执行计划,然后与存储引擎交互。

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

  3、存储引擎层

    存储引擎负责MySQL中数据的存储与提取,与底层系统文件进行交互。MySQL存储引擎是插件式的,服务器中的查询执行引擎通过接口与存储引擎进行通信,接口屏蔽了不同存储引擎之间的差异。现在有很多种存储引擎,各有各的特点,最常见的是MyISAM和InnoDB。

  4、系统文件层

    该层负责将数据库的数据和日志存储在文件系统之上,并完成与存储引擎的交互,是文件的物理存储层。主要包含日志文件、数据文件、配置文件、pid文件、socket文件等。

    1)日志文件

      错误日志(Error log):默认开启  show variables like '%log_error%'

      通用查询日志(General query log):记录一般查询语句,show variables like '%general%'

      二进制日志(binary log):记录了对MySQL数据库执行的更改操作,并且记录了语句的发生时间、执行时长;但是它不记录select/show等不锈钢数据库的SQL。主要用于数据库恢复和主从复制。

        show variables like '%log_bin%';  //是否开启

        show variables like '%binlog%';  //查看参数

        show binary logs;  //查看日志

      慢查询日志(slow query log):记录所有执行时间超时的查询SQL,默认是10秒。

        show variables like '%slow_query%';  //是否开启

        show variables like '%long_query_time%';  //查看时长

    2)配置文件:用于存放MySQL所有的配置信息文件,比如my.cnf、my.ini等。

    3)数据文件

      

    4)pid文件:是mysqld应用程序在Unix/Linux环境下的一个进程文件,和许多其他Unix/Linux服务端程序一样,它存放这自己的进程id。 CentOS8上安装MySQL - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)有相关介绍,可参考。

    5)socket文件:也是在Unix/Linux环境下才有的,用户在这俩环境下客户端链接可以不通过TCP/IP完了而直接使用Unix Socket 来链接MySQL。

     

最新文章

  1. 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\106f9ae8\cc0e1
  2. Qt Creator pro 文件 导入vs2013碰到的问题
  3. MooseFS
  4. 开发工具&环境
  5. ADO.NET学习
  6. iTextSharp快速使用指南
  7. 0518 Scrum项目5.0
  8. 如何将jar包加入到Maven本地仓库
  9. SQl函数的写法
  10. javascript控制子页面对父页面控件操作
  11. Android 给ListView设置Adapter
  12. 《Mastering Opencv ...读书笔记系列》车牌识别(II)
  13. 使用php实现网站验证码功能【博主推荐】
  14. 【2017-06-05】Jquery.ajax
  15. ReactiveCocoa应用篇(一)
  16. 精通libGDX-RPG开发实战
  17. PHP开发环境apache搭建
  18. VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——AlbumView相册控件的使用方式
  19. Java:ConcurrentLinkedQueue的实现原理分析
  20. project 2013 任务显示编号

热门文章

  1. test_6 python的列表去重
  2. spring-data-jpa -hibernate --specificationExecutor
  3. 【记录一个问题】redis中执行事务出现错误“EXECABORT Transaction discarded because of previous errors”
  4. 【记录一个问题】cv::cuda::dft()比cv::dft()慢很多
  5. 学习Java第10天
  6. Java架构系列问题合集-目录
  7. JavaScripts之柯里化与偏函数
  8. .NET6: 开发基于WPF的摩登三维工业软件
  9. ApacheCN Angular 译文集 20211114 更新
  10. 浅谈FFT(快速傅里叶变换)