MySQL 架构

MySQL架构

MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化
器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器的连接器。整体架构图如下所⽰:
  • MySQL Connectors:为使⽤MySQL服务的编程语⾔平台,提供了访问接⼝,可以根据⾃⼰实际使⽤的编程语⾔到官⽹下载地址下载。
  • MySQL Shell:是⼀个⾼级客⼾端和代码编辑器,以组件的形式提供,需要单独安装。除了提供的类似于 mysql 客⼾端的功能,还可以使⽤ JavaScript 和 Python 调⽤MySQL 的API,⼀般为开发 ⼈员使⽤。
  • 连接层:对客⼾端连接进⾏权限校验并保存客⼾端的连接信息,通过池化技术实现线程重⽤,以及根据具体的配置限制连接数量。
  • 服务管理和公共组件:提供了数据备份与恢复,安全组件,主从复制和集群管理,表分区等实⽤功能。
  • 服务层:提供了NoSQL API, SQL API, SQL语句解析,SQL语句优化,SQL语句缓存等组件,并将优化后的SQL语句发送⾄存储引擎执⾏相应的操作并返回结果。
  • 存储引擎层:⼀系列可插拔的存储引擎,主要负责数据的写⼊和读取,与底层的数据和⽇志⽂件进⾏交互,可以根据具体的业务需求选择不同的存储引擎,后⾯我们具体介绍他们之间的区别。
  • ⽂件系统层:包含了MySQL发⾏版的⽂件和程序,以及具体数据库⽂件和⽇志。
接下来我们介绍各层级在整个MySQL服务器中实现的功能。

连接层

连接层的作⽤是处理客⼾端的连接,这里主要介绍MySQL Server如何管理连接,包括对可⽤连接接⼝的描述和服务器如何使⽤连接处理线程。

网络端口和连接管理线程

MySQL是一个网络服务,通过 IP+端口号 就可以找到网络上指定的一个MySQL服务。 ⼀台服务器能够侦听多个⽹络端⼝上的客⼾端连接,开放多个端⼝,只需在选项⽂件 /etc/mysql/my.cnf 中指定多个端⼝ 即可,配置如下所⽰:
[mysqld] # mysqld节点
port=3306 # 端⼝1
port=3307 # 端⼝2

比如,我们设置了 mysqld 服务的端口号为3306和3307,那么我们在启动 mysql 客户端程序的时候就需要向操作系统申请这两个端口号中的一个,进而可以来访问 mysqld 服务。

通过连接管理器线程处理端⼝上的客⼾端连接请求:
  • 在所有平台上,⽤⼀个管理器线程处理所有的 TCP/IP 连接请求。
  • 在 Unix 上,管理器线程还可以处理其他Unix socket 连接请求。
  • 在 Windows 上,使⽤⼀个管理器线程处理通过Shared-memory⽅式连接请求,使⽤另⼀个管理器线程处理Named-pipe⽅式连接请求。
  • 在所有平台上,可以额外启⽤⼀个端⼝⽤于接受针对管理的 TCP/IP 连接请求,管理端⼝的连接可以使⽤处理"普通" TCP/IP 请求的管理器线程,也可以通过选项⽂件配置单独的线程。

客户端连接线程管理

连接管理器线程在接收到每个客⼾端连接后,把请求转发到真正的执⾏线程,每个请求都对应⼀个执⾏线程,该线程处理连接的⾝份验证和具体请求。执⾏线程使⽤线程池技术进⾏缓存,当⼀个请
求需要处理时,先从线程池中查找是否有可⽤的线程,如果没有则新创建⼀个,当连接结束时,如果线程池没有满,则把当前线程放⼊线程池,主要的作⽤是提⾼线程的复⽤,减少创建线程造成的系统开销从⽽提⾼效率。
可以通过以下⼏个系统变量和状态变量控制和监视服务器管理客⼾端连接的线程:
  • 系统变量 thread_cache_size 决定了线程池缓存的⼤⼩。默认情况下,服务器在启动时会⾃动调整这个值,但也可以通过选项⽂件明确指定⼤⼩,值为 0 时禁⽤缓存,此时为每个新连接创建执⾏⼀个线程,并在连接断开时释放
  • 有些复杂的SQL语句在执⾏过程中可能会有深层递归从⽽消耗更多的内存,通过设置thread_stack=N 调整线程堆栈⼤⼩
  • 要查看缓存中的线程数以及超过缓存数后新创建的线程数,通过状态变量 Threads_cached 和 Threads_created 查看
[mysqld] # mysqld节点
thread_cache_size=16 #线程池⼤⼩
thread_stack=1048576 #堆栈内存⼤⼩

连接量管理

  • 系统变量 max_connections 可以控制服务器允许同时连接的最⼤客⼾端数,当服务器达到max_connections 指定的连接数时会拒绝所有新的连接请求,同时会增加状态变量Connection_errors_max_connections 的值
  • mysqld实际上允许 max_connections+1 个客⼾端连接。额外的连接为拥有 connection_admin 权限的帐⼾(管理员)使⽤,即使普通连接达到了 max_connections 的数量,管理员也可以连接到服务器进⾏管理操作;
  • 在部署为主从复制的环境中,从节点的连接数也会计⼊ max_connections 中,如果连接达到上限主从复制将会失败
  • max_connections 具体数据和服务器的硬件有关,⽐如可⽤的内存、每个连接消耗的内存,每个连接的⼯作负载、响应时间、可⽤⽂件描述符的数量等等

服务层

数据库服务层是整个数据库服务器的核⼼,主要包括了服务管理和公共组件、NoSQL和SQL接⼝、解析器、查询优化器和缓存等部分,下⾯我们分别介绍每个部分的作⽤:

服务管理和公共组件

MySQL提供了多种功能服务以满⾜不同使⽤场景下的需要,常⽤的服务如下:
  • Backup & Recovery:备份与恢复。MySQL的备份与恢复服务允许用户创建数据库的副本(备份),以便在数据丢失、损坏或意外删除等情况下,可以从备份中还原数据库到之前的某个状态。
  • Security:安全。MySQL通过各种机制来确保安全性。这包括用户认证、授权(确定用户对数据库对象,如表格、视图等有哪些操作权限,例如查询、插入、更新、删除等权限)、加密(对敏感数据进行加密存储,使得即使数据被窃取,没有解密密钥也无法获取真实内容)等方面的功能。
  • Replication:主从复制。主从复制是一种用于提高数据库可用性、扩展性和数据安全性的技术。在MySQL中,有一个主数据库(Master)和一个或多个从数据库(Slave)。主数据库负责处理所有的写操作(如插入、更新、删除数据等),而从数据库则复制主数据库的数据变化并保持与主数据库的数据一致性。从数据库主要用于读操作,这样可以分担主数据库的读负载,提高整个系统的性能。同时,从数据库也可以作为主数据库的备份,在主数据库出现故障时,可以切换到从数据库继续提供服务。
  • Cluster:MySQL集群。MySQL集群是一种将多个MySQL服务器组合在一起,共同提供数据库服务的技术。通过集群,可以实现高可用性(避免单点故障,当某个节点出现问题时,其他节点可以继续提供服务)、可扩展性(可以方便地添加新的节点来处理更多的负载)和高性能(多个节点并行处理数据库操作)等目标。
  • Partitioning:表分区。表分区是将一个大的表按照特定的规则分成多个较小的、更易于管理的子表(分区)的技术。例如,可以按照时间(如每月的数据作为一个分区)、范围(如按照数据值的范围划分分区)等方式进行分区。这样做的好处包括提高查询性能(因为可以只查询特定的分区而不是整个大表)、方便数据的管理(如对过期数据的清理可以针对特定分区进行)等。
  • Instance Manager:实例管理。MySQL实例是一个独立的数据库管理环境,包括数据库服务器进程、内存结构和存储的数据等。实例管理服务负责管理MySQL实例的启动、停止、配置等操作。
  • Administrator:MySQL管理员。MySQL管理员负责整个MySQL数据库系统的管理工作。这包括用户管理(创建、删除用户,设置用户权限等)、数据库维护(如监控数据库的性能、优化数据库结构、处理数据库故障等)、安全管理(确保数据库的安全性,如设置防火墙规则、防止SQL注入攻击等)等多方面的工作。
  • Migration Toolkit:迁移⼯具包。在实际应用中,可能需要将数据从一个数据库系统迁移到MySQL,或者在不同版本的MySQL之间进行数据迁移。MySQL的迁移工具包提供了一系列工具和功能来帮助用户顺利完成这些迁移工作。

NoSQL接口与SQL接口

主要负责接收客⼾端发送的各种SQL语句和命令,并将SQL发送到其他部分,然后把接收到的结果返回给客⼾端。

Parser(语法分析器)

语法分析器的主要作⽤是将客⼾端发来的SQL语句中的关键字和⾃定义字段进⾏提取、解析,最
终将 SQL 语句转换为⼀棵解析树,分析的过程中包含词法分析和语法分析。
  • 词法分析,主要是对关键字进⾏提取,⽐如 select/update/delete/create...
  • 语法分析,主要判断 SQL 语句是否满⾜语法规则,如果语法错误则异出异常,也就是我们常⻅的ERROR 1064 (42000): You have an error in your SQL syntax。
例如有如下SQL语句, 对应的解析树大致如图所示
select sn, name from student where id = 1;

Optimizer(查询优化器)

通过语法校验的SQL语句将进⼊查询优化器处理阶段,查询优化器会将解析树转化为查询计划,⼀般情况下,⼀条查询可以有很多种执⾏⽅案,查询优化器会根据执⾏计划匹配合适的索引,选择最
佳的执⾏⽅案,最终把确定要执⾏的SQL交给执⾏器调⽤存储引擎API。

Caches & Buffers(缓存)

MySQL的缓存主要的作⽤是为了提升查询的效率,当服务器接收到⼀个 select 查询语句时,会先进⼊缓存查询当前SQL语句在缓存中是否存在,缓存以 key value 的形式存储,key是具体的
SQL语句,value是结果的集合,如果命中缓存,直接返回结果,⽆法命中缓存,则进⼊分析器进⾏正常查询流程。
这⾥需要说明的是,缓存数据对应的数据在被更新之后将会失效,尤其在写多读少的场景中,缓
存会频繁失效与新增,命中率⾮常低,因此MySQL5.6之后服务层缓存功能默认关闭,⽽且在 MySQL8.0中服务层缓存被官⽅删除。
综上了解,SQL语句的执⾏流程如下

存储引擎

存储引擎是处理不同表类型SQL操作的MySQL组件。MySQL服务器采⽤可插拔的存储引擎架构,
在服务器运⾏时可以动态的加载和卸载。
查看当前服务器⽀持哪些存储引擎可以使⽤ show engines   语句, Engine 表⽰:存储引擎的名称, Support :表⽰当前服务器是否⽀持,值分别为: YES NO DEFAULT 分别表⽰,⽀
持、不⽀持和当前设置或默认引擎,如下所⽰:
有关存储引擎的介绍,可以浏览 MySQL 存储引擎-CSDN博客。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】二叉搜索树

目录 1. 二叉搜索树的概念 2. 二叉搜索树的性能分析 3.二叉搜索树的实现 3. 1.二叉搜索树的插入 3.2. 二叉搜索树的查找 3.3. 二叉搜索树的删除 3.4. 二叉搜索树的实现代码 4. 二叉搜索树key和key/value两种使用场景 4.1 key搜索场景: 4.2 key/value搜索场…

【C++】string的关系运算与比较分析

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯基础知识:C 中的 string 关系运算器1. 关系运算器概述2. 字符串比较的本质 💯代码解析与扩展代码例一:相等比较代码解析输出 代码例二&a…

高性能网络模式:Reactor 和 Proactor

Reactor Reactor 采用I/O多路复用监听事件,收到事件后,根据事件类型分配给某个进程/线程。 实际应用中用到的模型: 单 Reactor 单进程 单 Reactor 多线程 优点:能充分利用多核CPU性能。 缺点:存在多线程竞争共享资源…

有限元分析学习——Anasys Workbanch第一阶段笔记(10)桌子载荷案例分析_实际载荷与均布载荷的对比

目录 0 序言 1 桌子案例 2 模型简化 3 方案A 前处理 1)分析类型选择 2)材料加载 3)约束、载荷及接触 4)控制网格(网格大小需要根据结果不断调整) 初始计算结果 加密后计算结果 4 方案B、C 前处理 1)分析…

用HTML + CSS实现太极图

目录 一、效果图 二、实现思路 三、完整代码 四、总结 一、效果图 如图所示,太极图一半为黑色(代表阴),另一半为白色(代表阳)。这两部分相互环绕,形成一种流动的、旋转的感觉。 二、实现思…

【Rust自学】11.7. 按测试的名称运行测试

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.7.1. 按名称运行测试的子集 如果想要选择运行的测试,就将测试的名称(一个或多个)作为cargo test的…

标准应用 | 2025年网络安全服务成本度量实施参考

01 网络安全服务成本度量依据相关新变化 为了解决我国网络安全服务产业发展中面临的服务供需两方对于服务成本组成认知偏差较大、网络安全服务成本度量缺乏依据的问题,中国网络安全产业联盟(CCIA)组织北京赛西科技发展有限责任公司、北京安…

HAMi + prometheus-k8s + grafana实现vgpu虚拟化监控

最近长沙跑了半个多月,跟甲方客户对了下项目指标,许久没更新 回来后继续研究如何实现 grafana实现HAMi vgpu虚拟化监控,毕竟合同里写了需要体现gpu资源限制和算力共享以及体现算力卡资源共享监控 先说下为啥要用HAMi吧, 一个重要原…

某地武警海警总队建筑物自动化监测

1. 项目概述 该项目分布于三个不同的地级市,都是位于临海港口的码头,由中国武警海警总队驻扎,守卫人民安全。 1号建筑物自动化监测系统项目由一道伸缩缝划分为两个监测单元,建筑物为三层混合结构,采用350mm厚石墙、2…

负载均衡原理及算法

什么是负载均衡? 负载均衡 指的是将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力以及可靠性。负载均衡服务可以有由专门的软件或者硬件来完成,一般情况下,硬件的性能更好,软件的价格更便宜&#x…

Windows 下Mamba2 / Vim / Vmamba 环境安装问题记录及解决方法终极版(无需绕过triton)

导航 安装教程导航 Mamba 及 Vim 安装问题参看本人博客:Mamba 环境安装踩坑问题汇总及解决方法(初版)Linux 下Mamba 及 Vim 安装问题参看本人博客:Mamba 环境安装踩坑问题汇总及解决方法(重置版)Windows …

LLMs之VDB:LanceDB的简介、安装和使用方法、案例应用之详细攻略

LLMs之VDB:LanceDB的简介、安装和使用方法、案例应用之详细攻略 目录 LanceDB的简介 1、LanceDB的主要特性 2、为何选择 LanceDB? LanceDB的安装和使用方法 1、安装方法 Javascript/Typescript Python 2、使用方法 Javascript Python LanceDB…

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《…

Java面试核心知识4

公平锁与非公平锁 公平锁(Fair) 加锁前检查是否有排队等待的线程,优先排队等待的线程,先来先得 非公平锁(Nonfair) 加锁时不考虑排队等待问题,直接尝试获取锁,获取不到自动到队尾…

探索AGI:智能助手与自我赋能的新时代

目录 1 AGI1.1 DeepMind Levels(2023年11月)1.2 OpenAI Levels(2024年7月)1.3 对比与总结1.4 AGI可能诞生哪里 2 基于AI的智能自动化助手2.1 通用型大模型2.2 专业的Agent和模型工具开发框架2.3 编程与代码生成助手2.4 视频和多模态生成2.5 商…

python迷宫寻宝 第4关 自动寻路(找宝箱、宝石、终点、获取企鹅信息)

目录 地图 ​编辑 1、成功获取粉宝石或黄宝石。 2、获取企鹅的信息 3、获取红宝石 (1)api.get.item获取红宝石 (2)context.items获取红宝石 4、获取宝箱 (1)api.get.item获取宝箱 (2)context.items获取宝箱 5、达到终点 …

慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)

3.UI模板 当我们选择一条已经建好的业务对象点击功能按钮【UI模板】进入该业务对象的UI显示配置界面。 右边填写的是UI模板的编码以及对应名称;菜单界面配置以业务对象UI模板编码获取显示界面。 3.1【列表-按钮】 展示的对应业务对象界面的功能按钮配置&#xff1…

PyCharm 引用其他路径下的文件报错 ModuleNotFound 或报红

PyCharm 中引用其他路径下的文件提示 ModuleNotFound,将被引用目录添加到系统路径: # # 获取当前目录 dir_path os.path.dirname(os.path.realpath(__file__)) # # 获取上级目录 parent_dir_path os.path.abspath(os.path.join(dir_path, os.pardir))…

mysql本地安装和pycharm链接数据库操作

MySQL本地安装和相关操作 Python相关:基础、函数、数据类型、面向、模块。 前端开发:HTML、CSS、JavaScript、jQuery。【静态页面】 Java前端; Python前端; Go前端 -> 【动态页面】直观: 静态,写死了…

单片机Day1

目录 一.什么是单片机? 二.单片机的组成 三.封装形式 四.优势 五.分类 通用型: 专用型: 按处理的二进制位可以分为: 六.应用: 七.发展趋势 1.增加CPU的数据总线宽度。 2.存储器的发展。 3.片内1/0的改进 …