MYSQL数据库之系统架构

MySQL体系架构

MySQL系统架构图

Mysql Server架构自上往下可以分为网络连接层、服务层、存储引擎层和系统文件层

网络连接层

  • 客户端连接器(Client Connectors):提供与MySQL服务器建立连接的支持。目前支持主流的服务端编程技术,如常见的Java、C、Python、.Net等等,它们通过各自API技术与MySQL建立连接。

服务层(MySQL Server)

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

  • 连接池(Connection Pool):负责存储和管理客户端与数据库的连接,一个线程负责管理一个连接
  • 系统管理和控制工具(Management Services & Utilities):例如备份恢复、安全管理、集群管理等
  • SQL接口(SQL Interface):用于接收客户端发送的各种SQL命令,并且返回用户需要的查询的结果。比如:DML、DDL、存储过程、视图、触发器等等
  • 解析器(Parser):负责将请求的SQL解析生成一个“解析树”。然后根据一些MySQL规则进一步检查解析树是否合法。
  • 查询优化器(Optimizer):当“解析树”通过解析器语法检查后,将交由优化器将其转化成执行计划,然后与存储引擎交互
  • 缓存(Cache & Buffer):缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,权限缓存,引擎缓存等等。如果查询缓存有命中的查询结果,查询语句可以直接去缓存中取数据

存储引擎层(Pluggable Storage Engines)

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

系统文件层

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

  • 日志文件

    • 错误日志(Error log)

      默认开启,show variables like '%log_error%';

    • 通用查询日志(General query log)

      记录一般查询语句,show variables like '%general%';

    • 二进制日志(Binary log)

      记录对MySQL数据库执行的更改操作,并且记录语句的发生时间、执行时长;但是不记录select、show等等不修改数据库的SQL。主要用于数据库恢复和主从复制。

    • 慢查询日志(slow query log)

      记录所有执行时间超时的查询SQL,默认是10秒

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

      show variables like '%long_query_time%'; // 超时时间

  • 配置文件

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

  • 数据文件

    • db.opt文件:记录这个库的默认使用的字符集和校验规则
    • frm文件:存储与表相关的元数据(meta)信息,包括表结构的定义信息等等,每张表都会一个frm文件
    • MYD文件:MyISAM存储引擎专用,存放在MyISAM表的数据(data),每张表都会有一个.MYD文件
    • MYI文件:MyISAM存储引擎专用,存放MyISAM表的索引相关信息,每张表MyISAM表对应一个.MYI文件
    • idb文件和IBDATA文件:存放InnoDB的数据文件(包括索引)。InnoDB存储引擎有两种表空间方式:独享表空间和共享表空间
      • 独享表空间使用.idb文件来存储数据,且每张InnoDB表对应一个.idb文件;
      • 共享表空间使用.ibdata文件,所有表共同使用一个(或者多个,自行配置).ibdata文件
    • ibdata1文件:系统表空间数据文件,存储表元数据、Undo日志等
    • ib_logfile0、ib_logfile0文件:Redo log日志文件
  • pid文件

    pid文件是mysqld应用程序在Unix/Linux环境下的一个进程文件,和许多其他Unix/Linux服务端程序一样,它存放着自己的进程id

  • Socket文件

    socket文件也是在Unix/Linux环境下才有的,用户在Unix/Linux环境下客户端连接可以不通过TCP/IP网络而直接使用Unix Socket来连接MySQL Server

posted @ 2021-06-03 13:50  GZ-Kevin哥  阅读(215)  评论(0编辑  收藏  举报