MySQL 架构
MySQL架构

- MySQL Connectors:为使⽤MySQL服务的编程语⾔平台,提供了访问接⼝,可以根据⾃⼰实际使⽤的编程语⾔到官⽹下载地址下载。
- MySQL Shell:是⼀个⾼级客⼾端和代码编辑器,以组件的形式提供,需要单独安装。除了提供的类似于 mysql 客⼾端的功能,还可以使⽤ JavaScript 和 Python 调⽤MySQL 的API,⼀般为开发 ⼈员使⽤。
- 连接层:对客⼾端连接进⾏权限校验并保存客⼾端的连接信息,通过池化技术实现线程重⽤,以及根据具体的配置限制连接数量。
- 服务管理和公共组件:提供了数据备份与恢复,安全组件,主从复制和集群管理,表分区等实⽤功能。
- 服务层:提供了NoSQL API, SQL API, SQL语句解析,SQL语句优化,SQL语句缓存等组件,并将优化后的SQL语句发送⾄存储引擎执⾏相应的操作并返回结果。
- 存储引擎层:⼀系列可插拔的存储引擎,主要负责数据的写⼊和读取,与底层的数据和⽇志⽂件进⾏交互,可以根据具体的业务需求选择不同的存储引擎,后⾯我们具体介绍他们之间的区别。
- ⽂件系统层:包含了MySQL发⾏版的⽂件和程序,以及具体数据库⽂件和⽇志。
连接层
网络端口和连接管理线程
[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接⼝、解析器、查询优化器和缓存等部分,下⾯我们分别介绍每个部分的作⽤:
服务管理和公共组件
- 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接口
Parser(语法分析器)
- 词法分析,主要是对关键字进⾏提取,⽐如 select/update/delete/create...
- 语法分析,主要判断 SQL 语句是否满⾜语法规则,如果语法错误则异出异常,也就是我们常⻅的ERROR 1064 (42000): You have an error in your SQL syntax。
select sn, name from student where id = 1;
Optimizer(查询优化器)
Caches & Buffers(缓存)

存储引擎

相关文章:
MySQL 架构
MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器的连接器。整体架构图如下所⽰: MySQL Connectors:为使⽤…...
XML 解析器:深入解析与高效应用
XML 解析器:深入解析与高效应用 引言 XML(可扩展标记语言)作为一种重要的数据交换格式,被广泛应用于各种系统和平台中。为了有效地处理和解析XML数据,XML解析器发挥着至关重要的作用。本文将深入探讨XML解析器的原理…...
LabVIEW设计 IIR 滤波器
这是一个设计 IIR 滤波器的 LabVIEW 程序框图,其功能主要是用于设计滤波器并计算其频率响应,但它并不直接对输入的波形进行实时滤波,而是提供一个滤波器的频率响应分析工具。 以下是框图中各部分的详细解释: 1. 主要模块功能说明 …...
基于改进粒子群优化的无人机最优能耗路径规划
目录 1. Introduction2. Preliminaries2.1. Particle Swarm Optimization Algorithm2.2. Deep Deterministic Policy Gradient2.3. Calculation of the Total Output Power of the Quadcopter Battery 3.OptimalEnergyConsumptionPathPlanningBasedonPSO-DDPG3.1.ProblemModell…...
AI刷题-数列推进计算任务、数组中的幸运数问题
目录 一、数列推进计算任务 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 优化思路 最终代码: 运行结果: 二、数组中的幸运数问题 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步…...
微服务的配置共享
1.什么是微服务的配置共享 微服务架构中,配置共享是一个重要环节,它有助于提升服务间的协同效率和数据一致性。以下是对微服务配置共享的详细阐述: 1.1.配置共享的概念 配置共享是指在微服务架构中,将某些通用或全局的配置信息…...
【计算机网络】窥探计网全貌:说说计算机网络体系结构?
标签难度考察频率综合题⭐⭐⭐60% 这个问题在计算机网络知识体系中是一个比较重要的问题,只有完整地了解计算机网络的体系结构才能清晰地认识网络的运行原理。 在回答这个问题时,笔者认为有几个比较重要的点: 首先一定要分清楚前置条件&am…...
【MySQL】DATEDIFF()函数使用
DATEDIFF 函数用于计算两个日期之间的差值,以天为单位 DATEDIFF 函数返回一个整数,表示 date1 和 date2 之间的天数。如果 date1 在 date2 之前,结果为负数;如果在 date2 之后,结果为正数;如果相等…...
计算机网络学习笔记
第1课 绪论、传输介质 【知识点回顾】 两种导线可以减小电磁干扰: 双绞线(分为非屏蔽双绞线、屏蔽双绞线)(RJ-45用)同轴电缆(短距离使用)网络通信的基本单位:位(bit&…...
Spring Boot性能提升的核武器,速度提升500%!
虚拟线程是 Java 21 引入的一个新特性,用于简化并发编程。它与传统的操作系统线程相比,具有显著的优势: 轻量级:虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。理论上&am…...
zig 安装,Hello World 示例
1. 安装 Zig 首先,你需要在你的计算机上安装 Zig 编译器。你可以从 Zig 官方网站 下载适合你操作系统的版本。 安装完成后,你可以在终端中运行以下命令来检查 Zig 是否安装成功: zig version如果一切正常,它会显示 Zig 的版本信…...
【数据库系统概论】第5章 数据库完整性【!触发器】
目录 5.1数据库完整性概述 5.2 实体完整性 5.3 参照完整性 5.4 用户定义的完整性 属性上的约束 1. 列值非空(NOT NULL) 2. 列值唯一(UNIQUE) 3. 检查列值是否满足条件(CHECK) 元组上的约束 5.5 完…...
Linux中通过frp实现内网穿透
1、准备工作 准备一台公网服务器(云服务器),推荐阿里云或者腾讯云都可以 需要下载好frp安装包Linux端的和Windows端的安装包 网址:Releases fatedier/frp (github.com)https://github.com/fatedier/frp/releases 2、下载frp_0…...
Vscode辅助编码AI神器continue插件
案例效果 1、安装或者更新vscode 有些版本的vscode不支持continue,最好更新到最新版,也可以直接官网下载 https://code.visualstudio.com/Download 2、安装continue插件 搜索continue,还未安装的,右下脚有个Install,点击安装即可 <...
上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天探底回升,沪指盘中跌超1.6%,创业板指一度跌逾3%,午后集体拉升翻红…...
LeetCode 3297.统计重新排列后包含另一个字符串的子字符串数目 I:滑动窗口
【LetMeFly】3297.统计重新排列后包含另一个字符串的子字符串数目 I:滑动窗口 力扣题目链接:https://leetcode.cn/problems/count-substrings-that-can-be-rearranged-to-contain-a-string-i/ 给你两个字符串 word1 和 word2 。 如果一个字符串 x 重新…...
ssm旅游攻略网站设计+jsp
系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 需要源码或者定制看文章最下面或看我的主页 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 2.1 SSM框架介绍 3 2.2 B/S结构介绍 3 …...
前端学习-环境this对象以及回调函数(二十七)
目录 前言 目标 环境对象 作用 环境对象this是什么? 判断this指向的粗略规则是什么? 回调函数 目标 常见的使用场景 综合案例:Tab任务栏切换 总结 前言 男儿何不带吴钩,收取关山五十州 目标 能够分析判断函数运行在不…...
计算机网络-数据链路层(虚拟局域网VLAN)
2.6 虚拟局域 2.6.1 虚拟局域网概述 以太网交换机连接的各个网络同属于一个广播域,随着以太网的规模扩大,广播域也会相应的扩大,巨大的广播域会带来巨大的弊端。 广播风暴 难以治理 潜在的安全问题 TCP/IP协议下会进行广播的协议:…...
Python贪心
贪心 贪心:把整体问题分解成多个步骤,在每个步骤都选取当前步骤的最优方案,直至所有步骤结束;每个步骤不会影响后续步骤核心性质:每次采用局部最优,最终结果就是全局最优如果题目满足上述核心性质…...
CSS 盒模型
盒模型 CSS盒模型是网页布局的核心概念之一,它描述了网页元素的物理结构和元素内容与周围元素之间的关系。根据W3C规范,每个HTML元素都被视为一个矩形盒子,这个盒子由以下四个部分组成: 内容区(Content areaÿ…...
【linux】vi编辑文件及readonly文件修改读写权限方法
板端vi修改文件: 1、vi 文件路径 vi mnt/eol/config/oem_eol.xml2、按 i进入修改状态,此时可以修改配置文件 3、按 esc退出修改状态,并按"wq!保存 问题:readonly文件无法直接vi修改 方案: 1、mount -o remoun…...
Git使用笔记
Git 版本控制 一、Git 介绍二、Git 使用1. 安装及配置2. 使用方法3. Git 命令3. 历史版本回退4. 分支 (Branch) 三、远程仓库1. SSH公钥连接Gitee2. 推送到远程仓库 一、Git 介绍 常见版本控制软件:集中式(CVS、SVN),分布式&#…...
mermaid大全(语法、流程图、时序图、甘特图、饼图、用户旅行图、类图)
⚠️ 有些网站的mermaid可能不完整,因此下面教程中可能有些语法是无效的。 😊亲测Typora软件均可以显示。 1. 介绍 Mermaid是一个基于JavaScript的图表绘制工具,它使用类似Markdown的语法来创建和修改各种类型的图表。以下是关于Mermaid的详…...
慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)
3.UI模板 当我们选择一条已经建好的业务对象点击功能按钮【UI模板】进入该业务对象的UI显示配置界面。 右边填写的是UI模板的编码以及对应名称;菜单界面配置以业务对象UI模板编码获取显示界面。 3.1【列表-按钮】 展示的对应业务对象界面的功能按钮配置࿱…...
vue3+ts+element-plus 输入框el-input设置背景颜色
普通情况: 组件内容: <el-input v-model"applyBasicInfo.outerApplyId"/> 样式设置: ::v-deep .el-input__wrapper {background-color: pink; }// 也可以这样设置 ::v-deep(.el-input__wrapper) {background-color: pink…...
python迷宫寻宝 第6关 安全策略
地图: 1、体力不足去找终点,体力足则原地不动 import api## 判断是否需要离场的函数 # 体力足返回False,体力不足返回True def should_leave():# 拿到我离终点的距离e_row api.get.exit(what"row")e_col api.get.exit(what"…...
【计算机网络】lab7 TCP协议
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 实验目的…...
Monorepo设置:新手指南
Monorepo是一种项目代码管理方法,指在单个代码仓库中管理多个项目,有助于简化代码共享、版本控制、构建和部署的复杂性,并提供更好的可重用性和协作性。 简单理解:所有项目都在一个代码仓库中 📦,但这并不意…...
HTTP 请求与响应的结构
一、引言 在当今数字化的时代,网络通信如同空气一般无处不在,而HTTP协议则是网络世界中最为重要的基石之一。当我们在浏览器中输入一个网址,轻松浏览网页、观看视频、下载文件或是进行在线购物等操作时,背后HTTP协议都在默默地发…...
计科高可用服务器架构实训(防火墙、双机热备,VRRP、MSTP、DHCP、OSPF)
一、项目介绍 需求分析: (1)总部和分部要求网络拓扑简单,方便维护,网络有扩展和冗余性; (2)总部分财务部,人事部,工程部,技术部,提供…...
Soildworks的学习【2025/1/12】
右键空白处,点击选项卡,即可看到所有已调用的选项卡: 点击机械小齿轮选项卡,选择文档属性,选择GB国标: 之后点击单位,选择MMGS毫米单位: 窗口右下角有MMGS,这里也可以选择…...
ORACLE-表空间和分区控制
--查询最后更新的统计信息时间 SELECT table_name, last_analyzed FROM dba_tables WHERE table_name 表名; --更新统计信息 -----按分区 BEGIN DBMS_STATS.GATHER_TABLE_STATS( ownname > XI_SF, -- 模式名称 tabname > 表名, -- 表名称 partnam…...
C# 与 Windows API 交互的“秘密武器”:结构体和联合体
一、引言 在 C# 的编程世界里,当我们想要深入挖掘 Windows 系统的底层功能,与 Windows API 打交道时,结构体和联合体就像是两把神奇的钥匙🔑 它们能够帮助我们精准地操控数据,实现一些高级且强大的功能。就好比搭建一…...
【数字化】华为-用变革的方法确保规划落地
导读:华为在数字化转型过程中,深刻认识到变革的必要性,并采用了一系列有效的方法确保转型规划的有效落地。华为认为,数字化转型不仅仅是技术层面的革新,更是企业运作模式、流程、组织、文化等深层次的变革。数字化转型…...
SpringData-Redis缓存
Spring Framework是领先的全堆栈Java/JEE应用程序框架。它提供了一个轻量级容器和一个通过使用依赖注入、AOP和可移植服务抽象实现的非侵入性编程模型。 NoSQL存储系统为传统RDBMS提供了一种横向可扩展性和速度的替代方案。就实现而言,键值存储代表NoSQL空间中最大…...
大语言模型兵马未动,数据准备粮草先行
从OpenAI正式发布ChatGPT开始,大型语言模型(LLM)就变得风靡一时。对业界和吃瓜群众来说,这种技术最大的吸引力来自于理解、解释和生成人类语言的能力,毕竟这曾被认为是人类独有的技能。类似CoPilot这样的工具正在迅速…...
跳表和Mysql联合索引的最左原则和索引下推的优化
文章目录 跳表(Skip List)关键特性跳表的结构示意图跳表的查询效率为什么 MySQL 不使用跳表而使用 B 树?跳表的实际应用场景 总结 MySQL 联合索引的最左匹配原则最左匹配原则的规则示例:创建联合索引查询示例及索引使用情况设计联…...
Android切换语言不退出App
1.需求 实现用户选择语言(未点击下一步),更新当前界面UI,点击下一步后,更新App的语言,并进行保存。 实现目标: 1.设置App的语言,本地进行保存 2.updateResources更新本地语言配置…...
Unity编程与游戏开发-编程与游戏开发的关系
游戏开发是一个复杂的多领域合作过程,涵盖了从创意构思到最终实现的多个方面。在这个过程中,技术、设计与美术三大核心要素相互交织,缺一不可。在游戏开发的过程中,Unity作为一款强大的跨平台游戏引擎,凭借其高效的开发工具和庞大的社区支持,成为了很多游戏开发者的首选工…...
【Git】问题汇总
在push的时候显示 protocol error: bad line length 8192 我在本地创建了一个gogs服务器,现在正在上传代码,但是出现了上述的这个问题。 解决方法 设置本地http.postBuffer(待验证) 方法一:全局配置 git config --g…...
搭建docker私有化仓库Harbor
Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…...
修改sshd默认配置,提升安全
对于Linux服务器,特别是暴露在公网的服务器,会经常被人扫描、探测和攻击。包括通过ssh访问登录攻击。对此,对默认的sshd配置进行调整,提升安全。 下面以CentOS 7.9为例说明: 一、常见安全措施 以root用户编辑vim /e…...
formik 的使用
礼记有言:独学而无友,则孤陋而寡闻 让我们一起了解更多便捷方法,缩短开发时间去摸鱼,嘿嘿。 框架:react 在写表单的时候,我不太喜欢把验证写的很繁琐,这里讲介绍,验证表单的非常好用…...
【学习笔记】理解深度学习的基础:机器学习
1. 机器学习基础 1.1 机器学习的定义与重要性 定义:深度学习是机器学习的一种特定形式。为了深入理解深度学习,必须牢固掌握机器学习的基本原理。机器学习算法是一种能够从数据中学习的算法,通过经验E在任务T上提高性能度量P(Mi…...
Docker 基础知识
背景 传统的linux的环境部署 命令多步骤多安装版本多使用docker的话,一个命令就可以全部搞定安装linux 之前安装过,所以直接使用的开罩进行复制的如果之前配置过静态地址,需要改成IPV4静态地址访问安装docker 参考连接:https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBk…...
pyqt鸟瞰
QApplication是Qt框架中的一个类,专门用于管理基于QWidget的图形用户界面(GUI)应用程序的控制流和主要设置。QApplication类继承自QGuiApplication,提供了许多与GUI相关的功能,如窗口系统集成、事件处理等。 QAppli…...
Linux syslog 运行机制
Busybox的syslogd认识与使用 syslogd 的基本工作原理: syslogd 是一个系统日志守护进程,它接收来自各种进程和系统服务的日志消息,并根据配置将这些消息存储到不同的日志文件中。 syslogd日志记录器由两个守护进程(klogd&#x…...
ZYNQ初识10(zynq_7010)UART通信实验
基于bi站正点原子讲解视频: 系统框图(基于串口的数据回环)如下: 以下,是串口接收端的波形图,系统时钟和波特率时钟不同,为异步时钟,,需要先延时两拍,将时钟同…...
day38 tcp 并发 ,linux下的IO模型----IO多路复用
TCP 并发 由于tcp协议只能实现一对一的通信模式。为了实现一对多,有以下的的处理方式 1. 多进程 开销大 效率低 2. 多线程 创建线程需要耗时 3. 线程池 多线程模型创建线程耗时问题,提前创建 4. IO多路复用 在不创建进程和线程的前提下,对…...