MySQL数据库架构

news2024/10/6 10:33:38

MySQL数据库架构

MySQL架构自顶向下大致可以分为连接层 , SQL层 , 存储引擎层 , 物理文件层。架构如下

在这里插入图片描述

连接层

img

-- 查看最大连接数
show variables like '%max_connections%';

客户端连接器,MySQL向外提供交互接口连接各种不同的客户端。

  1. 客户端/应用程序:客户端是与MySQL系统进行交互的组件,它可以是命令行工具、图形用户界面 (GUI) 或各种编程语言中的数据库连接库。客户端负责发送SQL查询请求给MySQL服务器,并接收返回的结果。
  2. 连接管理器:连接管理器负责处理客户端连接请求。它接收来自客户端的连接请求,并将它们分配给MySQL服务器线程池中的可用线程。连接管理器还负责验证用户的身份、管理连接池和控制连接数等。

特点:

(1)提供连接协议:TCP/IP 、SOCKET
(2)提供验证:用户、密码,IP,SOCKET
(3)提供专用连接线程:接收用户SQL,返回结果

 通过以下语句可以查看到连接线程基本情况
 mysql> show processlist;

SQL层

MySQL的核心,主要分为连接池(Connection Pool) , 系统管理和控制工具(Management Serveices & Utilities) , SQL接口(SQL Interface) , 解析器(Parser) , 查询优化器(Optimizer) , 查询缓存(Caches&Buffers)。

  • 连接池(Connection Pool)

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

    在服务器内部,每个client连接都有自己的线程。这个连接的查询都在一个单独的线程中执行。这些线程轮流运行在某一个CPU内核(多核CPU)或者CPU中。服务器缓存了线程,因此不需要为每个client连接单独创建和销毁线程 。

  • **系统管理和控制工具(Management Serveices & Utilities) **

    备份恢复、安全管理、集群管理等

  • SQL接口(SQL Interface)

    用于接受客户端发送的SQL命令,并且返回查询的结果。

    例如:DDL,DML,DCL,DQL等

  • 解析器(Parser)

    SQL命令传递到解析器的时候会被解析器验证和解析。

  • 查询优化器(Optimizer)

    SQL语句在查询之前会使用查询优化器对查询进行优化。(当【解析树】通过解析器语法检查后,将交由优化器将其转化成执行计划与存储引擎交互。一般执行sql脚本会遵循【选取–>投影–>联接】的策略)

  • 查询缓存(Caches&Buffers)

    如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据.

# 查询缓存配置情况
show variables like '%query_cache%';
  • 接收上层传送的SQL语句
  • 语法验证模块:验证语句语法,是否满足SQL_MODE
  • 语义检查:判断SQL语句的类型
    DDL :数据定义语言
    DCL :数据控制语言
    DML :数据操作语言
    DQL: 数据查询语言
  • 权限检查:用户对库表有没有权限
  • 解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案.
  • 优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划
    代价模型:资源(CPU IO MEM)的耗损评估性能好坏
  • 执行器:根据最优执行计划,执行SQL语句,产生执行结果
    执行结果:在磁盘的xxxx位置上
  • 提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能
  • 提供日志记录(日志管理章节):binlog,默认是没开启的。

存储引擎层

负责根据SQL层执行的结果,从磁盘上拿数据。将16进制的磁盘数据,交由SQL结构化化成表,连接层的专用线程返回给用户。

物理文件层

主要是将数据和日志存储在运行设备的文件系统之上,并完成于存储引擎的交互,是文件的物理存储层。 主要包含日志文件,数据文件,配置文件,pid 文件,socket 文件等。

  • 日志文件

    • 错误日志

      show variables like '%log_error%'  --默认开启
      
    • 二进制日志

      记录对数据库执行的操作 , 如:更改操作,语句的发生时间,执行时长。主要用于数据库恢复和主从复制。(不记录select,show等不修改数据库的SQL)

      show variables like '%log_bin%'; --是否开启
      show variables like '%binlog%'; --参数查看
      show binary logs;--查看日志文件
      
    • 通用查询日志

      show variables like '%general%';--记录一般查询语句
      
    • 慢查询日志

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

      show variables like '%slow_query%'; //是否开启
      show variables like '%long_query_time%'; //超时时间
      
    • 事务日志

      包含重做日志和撤销日志

  • 数据文件

    • db.opt 文件

      记录当前库默认使用的字符集和校验规则。

    • frm 文件

      存储与表相关的元数据(meta)信息,包括表结构的定义信息等,每一张表都会有一个frm 文件。

    • MYD 文件

      MyISAM 存储引擎专用,存放 MyISAM 表的数据(data),每一张表都会有一个.MYD 文件。

    • MYI 文件

      MyISAM 存储引擎专用,存放 MyISAM 表的索引相关信息,每一张 MyISAM 表对应一个 .MYI 文件。

    • ibd文件和 IBDATA 文件

      存放 InnoDB 的数据文件(包括索引)。InnoDB 存储引擎有两种表空间方式:独享表空间和共享表空间。

      独享表空间使用 .ibd 文件来存放数据,且每张InnoDB 表对应一个 .ibd 文件。

      共享表空间使用 .ibdata 文件,所有表共同使用一个(或多个,自行配置).ibdata 文件。

    • ibdata1 文件

      系统表空间数据文件,存储表元数据、Undo日志等 。

    • ib_logfile0、ib_logfile1 文件

      Redo log 日志文件。

  • 配置文件

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

  • pid文件

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

  • socket文件

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

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

  • socket文件

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/720812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7.3.6 【Linux】磁盘/文件系统参数修订

mknod 用到的磁盘 /dev/vda 的相关设备代码如下: 上表当中 252 为主要设备代码 (Major) 而 0~5 则为次要设备代码 (Minor)。 我们的Linux 核心认识的设备数据就是通过这两个数值来决定的!举例来说&#xf…

如何批量将PDF转换为图片?

在生活工作中,我们会处理很多电子合同。这些电子合同一般是PDF格式,不但存储空间大,且预览起来不太便捷,需要我们转换为图片格式更方便预览。如果人工一一处理比较繁琐复杂,有没有什么方案可以快速将pdf转换为图片呢&a…

如果想用unity做一个项目作为面试作品,至少该达到什么样的标准?

本文仅针对题目“如果想用unity做一个项目作为面试作品,至少该达到什么样的标准?”回答内容。 明确职业目标 首先要明确自身的职业目标,不同的行业、公司、游戏类型、岗位对作品的要求是不同的。 去什么样的行业?unity可做的有很…

python的IOError使用

try:npzfile np.load(calibrate.npz)mtx npzfile[mtx]dist npzfile[dist]except IOError:calibrate()python语言IOError错误一般多发生在对文件操作报错时,表示要打开的文件不存在

PostpreSQL内核学习-Chapter4 Foreign Data Wrapper(FDW)

FDW连接 preparations 两个在不同主机(满足TCP/IP连接是分属于不同IP地址下)(如果是安装PG源码)进入源码目录下面的/contrib/postgres_fdw/,然后用make & make install编译和安装 [rootlocalhost /]# cd 源码存…

为什么truncate函数(四舍五入)是x+0.4999997而不是+0.5?

目录 float的不精确表示 0.5的舍入方法 该方法的漏洞 0.4999997f舍入的结果错误 以0.4999997f改进舍入方法 可以用0.49999996、0.49999998或者0.49999999替换0.49999997吗? 在做舍入函数研究时,发现函数中实现四舍五入的trunc函数大概采用的逻辑是floor(…

LVS负载均衡-----DR模式

目录 1.DR模式原理 2.DR 模式的特点: 3.LVS-DR中的ARP问题 问题原因: 解决方法: 问题二:返回报文时源地址使用VIP,导致网关设备的ARP缓存表紊乱 解决方法: 4.DR模式 LVS负载均衡群集部署 1.配置负…

python进程线程问题

参考链接: 代码可去原博文复制: python缩短大量数据处理时间-进程池pool()和map() 一 定义与解释 1、对于python代码,多线程其实是个假的,因为每次计算的时候,实质上只有一个线程计算。使用多线程时,是几…

【天池题解】题解:CAAI-BDSC2023社交图谱链接预测(任务一:社交图谱小样本场景链接预测)

【天池题解】题解:CAAI-BDSC2023社交图谱链接预测(任务一:社交图谱小样本场景链接预测) 文章目录 【天池题解】题解:CAAI-BDSC2023社交图谱链接预测(任务一:社交图谱小样本场景链接预测&#xf…

中介者模式的学习与使用

1、中介者模式的学习 中介者模式是一种行为型设计模式,它通过引入一个中介者对象来解耦一组对象之间的交互。中介者模式促进了对象之间的松耦合,使得它们可以独立地进行通信,而不需要直接相互引用。   在中介者模式中,有以下几个…

获取文件大小并转换单位

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【工具使用】Notepad++如何使用正则表达式同时搜索多个字符串

一,简介 在调试代码定位问题的时候,由于log打印比较多,故需要使用NotePad文本编辑器进行搜索,并且需要同时搜索多个字符串,本文介绍如何同时搜索多个字符串,供参考。 二,操作步骤 2.1 搜索设…

90、基于STM32单片机数字频率计频率检测配NE555脉冲发生器设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一:AT89C51是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元&a…

如何基于 ESP-IDF SDK 为应用工程添加自定义的 menuconfig 编译条件设置?

在工程的 main 目录下添加 Kconfig.projbuild 文件对需要添加自定义设置的参数进行定义在应用代码中使用自定义设置的参数编写 Kconfig.projbuild 文件 在工程的 main 目录下添加 Kconfig.projbuild 文件 接下来会基于 esp-idf/examples/peripherals/uart/uart_async_rxtxtask…

Python黑魔法揭秘:超强公共操作符和推导式的编程技巧

文章目录 前言公共操作1.运算符1) 合并操作2)* 复制操作in / not in 判断数据在 / 不在容器中 公共方法len()del / del()max()min()range()enumerate() 容器类型转换1)list() 将某个序列转化为列表tuple() 将某个序列转换为元组set() 将某个序…

OpenCloudOS社区开源,助力软件开发

早前红帽宣布限制源代码访问性的政策,并解释说RHEL相关源码仅通过CentOS Stream公开,付费客户和合作伙伴可通过Red Hat Customer Portal访问到源代码,由此也导致非客户获取源码越来越麻烦, 据了解,CentOS是红帽发行的…

效率为王!项目管理软件如何帮你提高效率?

对于任何商业组织及其客户来说,低效率的员工和浪费的时间都是一个问题。团队成员懈怠会对团队的整体效率产生负面影响。除了巨大的财务挫折之外,这些问题的混合还导致多次延误、工作质量差和客户不满意。 但有了正确的项目管理软件,企业就可…

Netty各组件执行流程及原理

目录 一、netty执行流程 二、EventLoop 1、事件循环对象EventLoop 2、事件循环对象组EventLoopGroup 3、io任务 4、分工细化 5、handler执行中如何换的group 三、Channel 1、常用方法 2、channelFuture 3、为什么要异步 四、Future & Promise 1、jdk future …

Linux13.文件(上)

1.文件 内容 属性。 2.在程序中创建一个文件,文件是进程创建的(跑起来才有),默认路径是进程的工作路径。 3. C语言中字符串以\0结尾,文件不是。 4.指令 >文件 :清空文件。 5.理解cat指令的实现方式。 6.使用位操作传递宏标记位 7.操…

C语言经典案例-2

今天继续给大家分享C语言学习的经典练手案例 记录在校学习第三天,继续加油 今日案例来源:csdn社区每日一练 1.商品优惠计算机 商品优惠计算器 使用if语句编程实现输入购货金额,输出实际付款金额。购货折扣率如下: 购货金额≤500元…