mysql整体架构描述

news2024/12/25 12:30:33

文章目录

    • 数据库架构
      • 示意图
      • 1. 连接层
      • 2. 服务层
      • 3. 存储引擎层
      • 4. 文件系统层
      • 5. 系统层
      • 主要特性
    • 数据库文件格式
      • InnoDB 存储引擎
        • 文件类型及用途
      • MyISAM 存储引擎
        • 文件类型及用途
      • 其他文件类型
      • 文件内容示例
        • 表结构文件示例 (`.frm`)
        • InnoDB 数据文件示例(`.ibd`)
        • MyISAM 数据文件示例(`.MYD`)
        • SQL 脚本文件示例(`.sql`)
    • 数据库内存结构
      • 示意图
      • MySQL Server 层面的内存结构
      • InnoDB 存储引擎层面的内存结构
      • 其他组件

数据库架构

MySQL是一个开源的关系型数据库管理系统,广泛应用于各种Web应用和数据存储场景。以下是MySQL的主要架构组件:

示意图

mysql架构图

1. 连接层

  • 客户端库:应用程序通过客户端库与MySQL服务器进行通信。
  • 连接管理器:负责处理客户端的连接请求,包括认证、授权和会话管理。

2. 服务层

  • SQL接口:接收并解析SQL语句。
  • 查询优化器:分析SQL语句,选择最优的执行计划。
  • 缓存:包括查询缓存和InnoDB缓冲池,用于提高查询性能。
  • 内置函数:提供各种内置函数,如字符串处理、数学计算等。
  • 存储引擎接口:提供统一的接口供不同的存储引擎使用。

3. 存储引擎层

  • InnoDB:默认的存储引擎,支持事务、行级锁和外键。
  • MyISAM:早期的存储引擎,不支持事务,但读取速度快。
  • Memory:将数据存储在内存中,适用于临时表和缓存。
  • CSV:用于存储CSV格式的数据。
  • Archive:用于存储历史数据,支持高效的插入和压缩。
  • Federated:允许访问远程MySQL服务器上的表。

4. 文件系统层

  • 数据文件:存储表和索引的数据文件。
  • 日志文件:包括错误日志、查询日志、慢查询日志和二进制日志等。
  • 配置文件:包含MySQL的配置信息,如my.cnfmy.ini

5. 系统层

  • 操作系统:MySQL运行在各种操作系统上,如Linux、Windows和macOS。
  • 硬件:包括CPU、内存、磁盘和网络设备等。

主要特性

  • 事务支持:InnoDB存储引擎支持ACID事务。
  • 多线程:支持多线程并发访问,提高性能。
  • 复制:支持主从复制和组复制,实现数据的高可用性和负载均衡。
  • 分区:支持表的分区,提高查询性能和管理效率。
  • 视图:提供虚拟表,简化复杂查询。
  • 触发器:在特定事件发生时自动执行SQL语句。

数据库文件格式

MySQL 使用多种文件来存储数据和元数据,不同存储引擎会有不同的文件类型和格式。以下是 MySQL 中常见的一些文件类型及其用途和内容格式:

InnoDB 存储引擎

文件类型及用途
  1. .frm 文件

    • 用途:存储表定义信息。
    • 内容格式:二进制格式,包含表结构的定义。
  2. .ibd 文件

    • 用途:每个 InnoDB 表有一个 .ibd 文件,存储该表的数据和索引。
    • 内容格式:二进制格式,包含表数据和索引信息。
  3. ibdata1, ibdata2, …

    • 用途:共享表空间文件,存储 InnoDB 的系统表空间数据。
    • 内容格式:二进制格式,包含系统表和其他表的数据。
  4. ib_logfile0, ib_logfile1

    • 用途:重做日志文件,记录事务更改。
    • 内容格式:二进制格式,包含事务的重做日志记录。
  5. undo 文件夹下的文件

    • 用途:存储未提交事务的撤销信息。
    • 内容格式:二进制格式,包含撤销段信息。
  6. doublewrite 文件夹下的文件

    • 用途:用于提高数据页写入的安全性。
    • 内容格式:二进制格式,包含数据页的双写缓冲区信息。

MyISAM 存储引擎

文件类型及用途
  1. .frm 文件

    • 用途:存储表定义信息。
    • 内容格式:二进制格式,包含表结构的定义。
  2. .MYD 文件

    • 用途:存储 MyISAM 表的数据。
    • 内容格式:二进制格式,包含表的数据行。
  3. .MYI 文件

    • 用途:存储 MyISAM 表的索引信息。
    • 内容格式:二进制格式,包含索引信息。

其他文件类型

  1. .sql 文件

    • 用途:SQL 脚本文件,通常用于备份或导入数据。
    • 内容格式:文本格式,包含 SQL 语句。
  2. .csv 文件

    • 用途:CSV 格式的文件,可用于存储数据。
    • 内容格式:文本格式,包含逗号分隔的数据。
  3. .err 文件

    • 用途:错误日志文件,记录 MySQL 运行期间的错误信息。
    • 内容格式:文本格式,包含错误信息。
  4. .pid 文件

    • 用途:进程 ID 文件,记录 MySQL 服务的进程 ID。
    • 内容格式:文本格式,包含一个数字(进程 ID)。

文件内容示例

表结构文件示例 (.frm)

尽管 .frm 文件是二进制格式,不能直接用文本编辑器查看,但我们可以大致描述一下 .frm 文件中包含的信息类型:

  • 表名和数据库名:存储表的名称和所属数据库的名称。
  • 列定义:包括列名、数据类型、长度、是否有默认值、是否允许为空等信息。
  • 索引信息:包括索引类型、索引列的定义等。
  • 表选项:如表的存储引擎(如 InnoDB、MyISAM)、字符集编码、排序规则等。
  • 分区信息:如果表是分区表,则包含分区策略和分区表达式等信息。
  • 其他元数据:如表的状态、创建时间等
InnoDB 数据文件示例(.ibd

InnoDB 数据文件是以二进制格式存储的,直接查看这些文件的内容通常需要专用工具,如 innodb-tools 或 MySQL 自带的工具。例如,一个 .ibd 文件可能包含如下内容:

  • 表空间头部信息(表空间 ID、创建时间等)。
  • 数据页(每个页大约 16KB,默认情况下)。
  • 索引页(B+Tree 结构)。
MyISAM 数据文件示例(.MYD

MyISAM 数据文件也是以二进制格式存储的,直接查看这些文件的内容通常需要专用工具。例如,一个 .MYD 文件可能包含如下内容:

  • 数据行记录。
  • 每个记录包含主键、列数据等信息。
SQL 脚本文件示例(.sql

SQL 脚本文件通常是文本格式,可以直接阅读。例如:

-- 创建表
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  -- 更多字段定义
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

-- 插入数据
INSERT INTO `users` (`name`) VALUES ('John Doe');

这些文件的用途和内容格式各不相同,具体取决于存储引擎和支持的功能。在处理这些文件时,通常使用 MySQL 提供的工具和服务,如 mysqldumpmysqlimport 等。

数据库内存结构

MySQL 的内存结构主要包括几个关键组件,这些组件负责管理内存中的数据缓存、查询缓存、连接池等资源。下面详细介绍 MySQL 内存结构的主要组成部分:

示意图

mysql内存结构

MySQL Server 层面的内存结构

  1. 线程缓存(Thread Cache)

    • 用途:缓存客户端连接的线程,以减少创建和销毁线程的开销。
    • 管理:由 MySQL 服务器管理,可以根据需要动态调整大小。
  2. 连接池(Connection Pool)

    • 用途:保持一定数量的空闲连接,以便快速响应客户端请求。
    • 管理:连接池的大小可以通过 thread_cache_size 配置项设置。
  3. 查询缓存(Query Cache)

    • 用途:缓存 SELECT 查询的结果,以减少重复执行相同查询的开销。
    • 管理:查询缓存在 MySQL 8.0 中已被移除,但在之前的版本中可以通过 query_cache_size 配置项控制。
  4. 临时表(Temporary Tables)

    • 用途:用于存储临时数据,如排序操作的结果。
    • 管理:根据配置可以在内存中或磁盘上创建临时表。
  5. 表定义缓存(Table Definition Cache)

    • 用途:缓存表的定义信息,以减少每次访问表结构的开销。
    • 管理:可以通过 table_definition_cache 配置项控制。
  6. 表打开缓存(Table Open Cache)

    • 用途:缓存已打开的表,减少打开和关闭表的频率。
    • 管理:可以通过 table_open_cache 配置项控制。
  7. 预处理语句缓存(Prepared Statements Cache)

    • 用途:缓存预处理语句,以提高执行效率。
    • 管理:可以通过 preparedStatementCacheSize 配置项控制。

InnoDB 存储引擎层面的内存结构

  1. 缓冲池(Buffer Pool)

    • 用途:缓存 InnoDB 表的数据页和索引页,以提高读写性能。
    • 管理:通过 innodb_buffer_pool_size 配置项控制大小。
  2. 额外选择数组(Additional Select Array)

    • 用途:用于 InnoDB 存储引擎的 LRU 列表管理。
    • 管理:通过 innodb_lru_scan_depth 控制 LRU 列表的扫描深度。
  3. 重做日志缓冲(Redo Log Buffer)

    • 用途:暂存未写入磁盘的重做日志。
    • 管理:通过 innodb_log_buffer_size 配置项控制。
  4. 自适应哈希索引(Adaptive Hash Index)

    • 用途:在缓冲池内自动创建的哈希索引,加速索引页的查找。
    • 管理:由 InnoDB 自动维护,无需手动配置。
  5. 插入缓冲(Insert Buffer)

    • 用途:用于延迟更新辅助索引,以减少插入操作的开销。
    • 管理:由 InnoDB 自动管理。
  6. 锁信息结构(Lock System)

    • 用途:管理事务之间的锁定机制。
    • 管理:由 InnoDB 自动管理。

其他组件

  1. 日志文件(Log Files)

    • 用途:包括重做日志(redo log)和二进制日志(binlog),用于数据恢复。
    • 管理:重做日志由 InnoDB 管理,二进制日志由 MySQL 服务器管理。
  2. 慢查询日志(Slow Query Log)

    • 用途:记录执行时间较长的 SQL 查询。
    • 管理:通过 slow_query_loglong_query_time 配置项控制。
  3. 错误日志(Error Log)

    • 用途:记录 MySQL 服务器运行时的错误信息。
    • 管理:通过 log_error 配置项指定错误日志文件位置。

通过合理配置这些内存结构,可以显著提升 MySQL 的性能。然而,需要注意的是,MySQL 的内存使用应当根据实际的工作负载和硬件条件进行优化。

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

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

相关文章

(十四)、为 SpringCloud 项目生成 Docker 镜像

文章目录 1、原理2、最佳实践2.1、获得 SpringCloud 微服务启动模块的 jar 文件2.2、准备文件夹和 Dockerfile 文件2.3、 Dockerfile 文件的内容2.4、通过命令行构件新镜像 3、异常情况和处理:failed to create LLB definition3.1、现象3.2、解决配置国内镜像仓库清…

【Python报错已解决】 ModuleNotFoundError: No module named ‘tensorboard‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:使用pip安装TensorBoard…

vue3.0 使用echarts与echarts-gl 实现3D饼图

效果 安装echarts npm install echarts npm install echarts-gl 3d饼图组件&#xff1a; <template><div style"width: 100%; height: 100%" ref"echart"></div> </template><script setup> import { reactive, ref, onMou…

docker部署FastDFS文件系统详细记录,每个步骤都有详细记录。含linux和windows双系统安装教程

docker部署FastDFS文件系统详细记录 参考文章docker搭建FastDFS文件系统&#xff08;最详细版&#xff09; 文章里所有步骤由作者亲自测试&#xff0c;所以和 原文有不少差异 文章里所有步骤由作者亲自测试&#xff0c;所以和 原文有不少差异 文章里所有步骤由作者亲自测试&…

HTML + CSS - 网页布局之一般布局浮动布局

1. 一般布局 1.1 一般布局相关参数 元素内容常常可以想像为放在一个盒子里&#xff0c;然后在周边加上内边距&#xff0c;边框和外边距&#xff0c;是盒子模型 默认一个块级区域会填充父类所有的行向空间&#xff0c;并且沿着块伸长容纳其内容&#xff0c;可以为块状体设置某…

18、公司信贷管理|贷款额度的测算|贷款期限及其定价的设定逻辑!

银行在综合权衡贷款的第一还款来源和第二还款来源、风险和收益的基础上&#xff0c;应明确提出贷与不贷的意见。经调查审查同意的贷款&#xff0c;应提出最终的融资方案。 合理的融资方案既要有利于提升本行的竞争力&#xff0c;又要有利于控制贷款风险。完整的融资方案一般包…

苹果的“AI茅”之路只走了一半

今年苹果发布会最大的亮点&#xff0c;也许是和华为“撞档”&#xff0c;又或者是替腾讯“发布”新手游&#xff0c;但肯定不是iPhone 16。 9月10日&#xff0c;苹果秋季新品发布会与华为见非凡品牌盛典相继举行&#xff0c;iPhone 16系列也与HUAWEI Mate XT同日发布。 不过&…

性能测试-jmeter脚本录制(十五)

一、jmeter脚本录制&#xff08;不推荐&#xff09;简介&#xff1a; 二、jmeter脚本录制步骤 1、添加代理服务器和线程组 2、配置http代理服务器的端口和目标线程组 3修改本机浏览器代理 4、点击启动 5、每次操作页面前&#xff0c;修改提示文字

html 中如何使用 uniapp 的部分方法

示例代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><…

2024年,最新 OKR 优秀案例集(建议收藏)

我们发现&#xff0c;在你学习 OKR 的例子之前&#xff0c;先回顾一下 OKR 是如何写的&#xff0c;会有帮助。这样&#xff0c;你就能更好地理解下面描述的目标和关键结果的例子。 好消息是&#xff0c;Tita 的 OKR案例库有很多例子可以学习&#xff0c;它们从公司的 OKR 开始…

离散时域和连续频谱之间的傅里叶

要得到虚假的时域离散点&#xff0c;要用频域一个周期的积分

对接开源大模型应用开发平台最佳实践

本文以Dify为例介绍如何使用OpenSearch LLM智能问答版对接大模型应用开发平台构建RAG系统。 背景 随着AIGC技术日新月异的发展&#xff0c;LLM应用也在持续迭代。基于LLM、Agent框架、工作流编排能力等&#xff0c;可以搭建不同场景下丰富的应用服务。其中&#xff0c;检索增…

基于node.js koa2模拟快递柜存储取出快递微信小程序

本文介绍了一个基于Node.js Koa2框架的快递柜存储和取出快递的微信小程序。首先&#xff0c;我们使用Koa2框架搭建了一个简单的后端服务器&#xff0c;用于处理微信小程序发送的请求。然后&#xff0c;我们实现了快递柜的存储和取出功能&#xff0c;用户可以通过微信小程序扫描…

【包教包会】CocosCreator3.x拖尾MotionStreak威力加强版(支持3.x、支持原生、可合批)

将去年写的2.x拖尾升级到3.x 完美适配Web、原生平台&#xff08;其余平台没测过&#xff09;。 保留原版功能&#xff08;拖尾会跟随节点位移、缩放、受节点透明度影响&#xff0c;但不会跟随节点旋转&#xff09; 支持世界坐标 / 本地坐标切换&#xff08;至于为什么需要这…

中国老年社会追踪调查(2011-2020年)

中国老年社会追踪调查&#xff08;CLASS&#xff09;是一项全国性、连续性、系统性、长期性的社会调查项目&#xff0c;它通过定期、系统地收集中国老年人群的社会、经济背景数据&#xff0c;以掌握老年人在衰老过程中面临的各种问题和挑战。这些数据评估了各项社会政策措施在提…

精通PostgreSQL:解锁高效数据库管理的十大必备技巧与最佳实践

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

Leetcode 109.有序链表转换二叉搜索树(Medium)

给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0&#xff0c;-3,9&#xff0c;-10,null,5]&#xff0c;它表示所示的高度…

uni如何安装新依赖

如何在 uniapp 项目中&#xff0c;使用“插件市场” 的原生插件 插件市场 :DCloud 插件市场 1. 第一步&#xff1a; 首先在HBuilder x 中新建一个uniapp 项目&#xff0c;如果已建好 uniapp 项目则跳过该步骤。 2.第二步&#xff1a; 在 ”插件市场中 “ 选择你需要的原生插件…

微服务实战系列之玩转Docker(十四)

前言 时逢白露天骤变&#xff0c;细雨纷纷气渐凉&#xff0c;忽有故人心上过&#xff0c;回首山河已是秋。——碎碎念 当秋天来临的那一刻&#xff0c;你会想起故人么&#xff1f;此刻&#xff0c;突然一句唐诗——“故人具鸡黍&#xff0c;邀我去田家”&#xff0c;飘过了耳边…

CAN通信入门 - 1

CAN通信入门 - 1 CAN通信原理 参考链接&#xff1a;CAN总线原理 CAN总线信号为差分信号&#xff0c;其有2根总线分别为CAN-L\CAN-H。 CAN总线之间的电平分为显性电平和隐性电平&#xff0c;其中显性电平对应的是逻辑0&#xff0c;隐性电平对应的是逻辑1。当CAN差分信号为0V时…