【MySQL】MySQL如何存储元数据?

目录

1.数据字典的作用

2. MySQL 8.0 之前的数据字典

3. MySQL 8.0 及之后的数据字典

4.MySQL 8 中的事务数据字典的特征

5.数据字典的序列化

6. .sdi文件的作用:

7..sdi的存储方式


在 MySQL 中,元数据(Metadata) 是描述数据库对象(如表、列、索引、约束等)的结构信息。简单来说,元数据就是描述数据库里有哪些表、表里有哪些列、列是什么类型、谁有权限访问等信息。而数据字典是存储元数据的仓库。

1.数据字典的作用

数据字典存储了数据库的元数据,包括:

  • 数据库对象信息:如表、视图、索引、存储过程、触发器等。
  • 结构信息:如表的结构、列的数据类型、索引的类型等。
  • 约束信息:如主键、外键、唯一约束等。
  • 权限信息:用户和权限的元数据。

通过数据字典,MySQL 可以高效地管理和查询数据库对象的元数据。

2. MySQL 8.0 之前的数据字典

在 MySQL 8.0 之前,数据字典的元数据存储方式包括:

  1. 文件存储:元数据存储在 .frm 文件(表结构文件)、.par 文件(分区表文件)等中。
  2. 系统表:部分元数据存储在 information_schema  系统数据库(虚拟数据库,存储了 MySQL 服务器中所有数据库的元数据,只读)和 mysql 系统数据库中(仅存储 MySQL 核心元数据)。
  3. 在 MySQL 8.0 之前,InnoDB 系统表主要用于存储 InnoDB 存储引擎的内部信息,不用于存储 MySQL 的全局数据字典。

缺点:

  • 非事务性:元数据的更新不是事务性的,可能导致不一致。
  • 性能问题:频繁的文件操作影响性能。
  • 复杂性:元数据分散存储,管理复杂。

3. MySQL 8.0 及之后的数据字典

从 MySQL 8.0 开始,数据字典的实现发生了重大改进:

  • 基于 InnoDB:元数据存储在 mysql 系统数据库中的、使用 InnoDB 存储引擎的表中,而不再存储在 ibdata1 文件里,支持事务性操作。

  • 集中存储:所有元数据集中存储在 mysql 系统数据库下的数据字典表中。

  • 事务性:元数据的更新支持事务,确保一致性。

  • 性能提升:不再依赖 .frm 文件等外部文件存储元数据,减少了文件操作,提高了元数据访问性能。

4.MySQL 8 中的事务数据字典的特征

(1) 是所有 MySQL 服务器子系统的单一元数据存储库

统一存储

  • 在 MySQL 8.0 之前,元数据分散存储在不同的地方(如 .frm 文件、mysql 系统数据库等)。
  • 在 MySQL 8.0 中,所有元数据集中存储在 数据字典表 中,这些表位于 InnoDB 数据字典表空间(mysql.ibd)。

跨存储引擎:虽然不同的存储引擎(如 InnoDB、MyISAM)有自己的用户表,但它们的所有元数据都存储在相同的数据字典表中,这种统一存储简化了元数据的管理和访问。

(2)基于标准 SQL 定义

标准化:数据字典表基于标准 SQL 定义,使用标准的表结构和查询接口。这使得数据字典更易于扩展和维护。

公共数据字典:所有存储引擎共享同一个数据字典,避免了元数据的冗余和不一致。

自动升级:在 MySQL 8.0 中,安装程序会自动处理数据字典的升级,确保从旧版本迁移时的兼容性。

(3)使用事务存储引擎 InnoDB

事务性:数据字典表使用 InnoDB 存储引擎,支持事务性操作(ACID 特性)。这意味着元数据的更新是原子性的,要么全部成功,要么全部失败。

原子 DDL:DDL(数据定义语言)操作(如创建表、修改表结构)现在是原子性的。例如,如果在创建表的过程中发生错误,MySQL 会自动回滚,确保数据库状态一致。

损毁安全:由于数据字典存储在 InnoDB 表空间中,即使发生崩溃或断电,InnoDB 的崩溃恢复机制也能确保元数据的一致性。

(4)改进的 INFORMATION_SCHEMA

性能优化:在 MySQL 8.0 中,INFORMATION_SCHEMA 的实现基于数据字典表,使用了标准的优化技术(如索引、缓存),这使得查询 INFORMATION_SCHEMA 的性能显著提升。

更易于维护:由于 INFORMATION_SCHEMA 直接访问数据字典表,不再需要复杂的文件解析和内存管理,这使得 INFORMATION_SCHEMA 的实现更简洁、更易于维护。

5.数据字典的序列化

在 MySQL 5.6 及之前,InnoDB 存储引擎将所有的数据字典信息存储在共享表空间(即 ibdata1文件)中。这种存储方式存在一些问题:

  • 性能问题:由于数据字典的信息存储在共享表空间中,访问这些元数据时可能导致磁盘 I/O 瓶颈。
  • 恢复效率低:在恢复数据库时,重新加载共享表空间中的数据字典信息可能导致较慢的恢复速度。
  • 无法优化查询:由于数据字典在同一文件中,查询这些信息时的性能可能不是最优的。

因此,从 MySQL 5.7 开始,InnoDB 引入了 序列化字典机制,使得数据字典信息能够更高效地存储和访问。

MySQL 5.7 及以上版本中,InnoDB 使用 .sdi 文件(Serialized Dictionary Information)来专门存储序列化的数据字典信息,采用序列化格式存储。每个数据库会有一个对应的 .sdi 文件,用于存储该数据库的元数据,它包含了关于数据库、表、列、索引等的所有元数据,.sdi 文件中的数据是压缩的、序列化的元数据,MySQL 会在数据库启动时将其反序列化,以便快速访问。

序列化格式:这些元数据被序列化为一种压缩格式,InnoDB 可以在需要时快速反序列化并使用这些信息。这种方式比之前将数据字典存储在共享表空间中更加高效,尤其在高并发访问时能减少锁争用。

序列化:当数据字典信息被更新时(例如创建表、修改列、添加索引等),SDI 文件是将JSON 格式的元数据序列化为二进制数据,存储在 .sdi 文件中。序列化过程确保了元数据存储的高效性,并且节省了空间。

反序列化:在查询或操作数据库对象时,MySQL 会将 .sdi 文件中的序列化数据反序列化为可用的元数据格式。反序列化操作是在需要访问元数据时进行的,通常是高效且快速的。

6. .sdi文件的作用

每次元数据发生更改时(如创建、修改或删除表),MySQL 会自动生成它的副本 .sdi 文件。元数据以 JSON 格式序列化。

  • 元数据备份:在元数据更改时,保存当前状态的副本,便于备份、恢复或迁移
  • 数据一致性:确保元数据与数据文件的一致性,避免损坏或丢失。
  • 跨存储引擎支持:为不同存储引擎(如 InnoDB 和 MyISAM)提供统一的元数据管理机制。

7. .sdi的存储方式

MySQL 根据存储引擎的不同,将 .sdi 存储在不同的位置:

(1)InnoDB 存储引擎

  • 存储位置:存储在 InnoDB 用户表空间 中,与表的数据一起存储。
  • 文件格式被嵌入到表空间文件(.ibd 文件)中,作为表的一部分。
  • 优点:元数据与数据存储在一起,便于管理和恢复。

(2)MyISAM 存储引擎

  • 存储位置:存储在数据库目录中,作为独立的文件。
  • 文件格式:以 .sdi 文件的形式存储,文件名与表名对应。
  • 优点:独立文件便于查看和备份。

Q:那这里就有一个疑问,.sdi文件是如何为不同存储引擎(如 InnoDB 和 MyISAM)提供统一的元数据管理机制?

A:主要通过以下三种方式:

1.统一的元数据格式:无论使用 InnoDB 还是 MyISAM,SDI 的 JSON 结构是统一的,使用 JSON 格式存储元数据。

2.MySQL 提供了一个统一的数据字典 API,用于访问和管理 SDI 数据。无论底层存储引擎是 InnoDB 还是 MyISAM,上层应用(如 MySQL 服务器)都通过相同的接口读取和写入元数据。

3.统一的元数据恢复机制:在数据库崩溃或元数据损坏时,无论是 InnoDB 还是 MyISAM,,MySQL 可以通过 SDI 恢复元数据。当需要将表从一个存储引擎迁移到另一个存储引擎时,SDI 提供了一种统一的元数据表示形式。例如,可以将 MyISAM 表的 .sdi 文件解析后,直接应用到 InnoDB 表。

总之,SDI 通过统一的 JSON 格式和数据字典 API,为不同存储引擎(如 InnoDB 和 MyISAM)提供了一种一致的元数据管理机制。尽管不同存储引擎在物理存储方式上有所差异,但 SDI 确保了元数据的统一性、可移植性和可恢复性,从而简化了 MySQL 的元数据管理。

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

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

相关文章

瑞萨RA系列使用JLink RTT Viewer输出调试信息

引言 还在用UART调试程序么?试试JLINK的RTT Viewer吧!不需占用UART端口、低资源暂用、实时性高延时微秒级,这么好的工具还有什么理由不用了! 目录 一、JLink RTT Viewer 简介 二、软件安装 三、工程应用 3.1 SEGGER_RTT驱动包 3.2 手搓宏定义APP_PRINT 3.3 使用APP_…

Ranger 鉴权

Apache Ranger 是一个用来在 Hadoop 平台上进行监控,启用服务,以及全方位数据安全访问管理的安全框架。 使用 ranger 后,会通过在 Ranger 侧配置权限代替在 Doris 中执行 Grant 语句授权。 Ranger 的安装和配置见下文:安装和配置 …

LabVIEW烟气速度场实时监测

本项目针对燃煤电站烟气流速实时监测需求,探讨了静电传感器结构与速度场超分辨率重建方法,结合LabVIEW多板卡同步采集与实时处理技术,开发出一个高效的烟气速度场实时监测系统。该系统能够在高温、高尘的复杂工况下稳定运行,提供高…

【系统架构设计师】操作系统 - 特殊操作系统 ③ ( 微内核操作系统 | 单体内核 操作系统 | 内核态 | 用户态 | 单体内核 与 微内核 对比 )

文章目录 一、微内核操作系统1、单体内核 操作系统2、微内核操作系统 引入3、微内核操作系统 概念4、微内核操作系统 案例 二、单体内核 与 微内核 对比1、功能对比2、单体内核 优缺点3、微内核 优缺点 一、微内核操作系统 1、单体内核 操作系统 单体内核 操作系统 工作状态 : …

人工智能之数学基础:线性方程组

本文重点 线性方程组是由两个或两个以上的线性方程组成的方程组,其中每个方程都是关于两个或两个以上未知数的线性方程。 记忆恢复 我们先从小学学习的线性方程组找到感觉 解答过程: 将第二个方程乘以2,得到: 2x−2y=2 将第一个方程减去新得到的方程,消去x: (2x+y)−…

​第十一届传感云和边缘计算系统国际会议

重要信息 时间地点:2025年4月18-20日 中国-珠海 会议官网:www.scecs.org 简介 第十一届传感云和边缘计算系统 (SCECS 2025)将于2025年4月18-20日在中国珠海召开。将围绕“传感云”、“边缘计算系统”的最新研究领域,为来自国…

MDM设备管控,企业移动设备管理方案

目录: 目录 目录: 1. MDM:含义与定义 2. MDM如何工作? 3. BYOD与MDM:挑战与解决方案 4. 移动设备管理的主要优势 5. 移动设备管理的基本要素 6. 移动设备管理最佳实践 --地平线-- 移动设备管理 (MDM)历经多年…

S32k3XX MCU时钟配置

今天想从头开始配置S32K312中EB中的MCU模块,以下是我的配置思路与理解。 关键是研究明白,这些频率是如何通过一个总时钟,一步步分频得到的。 参考时钟,供外设模块使用,不同外设需要配置合理的参考时钟。 clock genera…

GitHub 超火的开源终端工具——Warp

Warp 作为近年来 GitHub 上备受瞩目的开源终端工具,以其智能化、高性能和协作能力重新定义了命令行操作体验。以下从多个维度深入解析其核心特性、技术架构、用户评价及生态影响力: 一、背景与核心团队 Warp 由前 GitHub CTO Jason Warner 和 Google 前…

SpringBoot 第二课(Ⅰ) 整合springmvc(详解)

目录 一、SpringBoot对静态资源的映射规则 1. WebJars 资源访问 2. 静态资源访问 3. 欢迎页配置 二、SpringBoot整合springmvc 概述 Spring MVC组件的自动配置 中央转发器(DispatcherServlet) 控制器(Controller) 视图解…

八股学习-JUC java并发编程

本文仅供个人学习使用,参考资料:JMM(Java 内存模型)详解 | JavaGuide 线程基础概念 用户线程:由用户空间程序管理和调度的线程,运行在用户空间。 内核线程:由操作系统内核管理和调度的线程&…

C++基础 [八] - list的使用与模拟实现

目录 list的介绍 List的迭代器失效问题 List中sort的效率测试 list 容器的模拟实现思想 模块分析 作用分析 list_node类设计 list 的迭代器类设计 迭代器类--存在的意义 迭代器类--模拟实现 模板参数 和 成员变量 构造函数 * 运算符的重载 运算符的重载 -- 运…

VScode的debug

如果有命令行参数的话: 打开调试配置: 在 VS Code 中,按下Ctrl Shift D打开调试面板。点击面板顶部的齿轮图标,选择“添加配置…” (Add Configuration...)。 创建新的调试配置: 选择Python,然后选择…

工作记录 2017-02-08

工作记录 2017-02-08 序号 工作 相关人员 1 修改邮件上的问题。 更新RD服务器。 郝 更新的问题 1、CPT的录入页面做修改 1.1、Total 改为 Price 1.2、当删除行时,下面的行自动上移。 2、Pending Payments、Payment Posted、All A/R Accounts页面加了CoIns…

Java SE 面经

1、Java 语言有哪些特点 Java 语言的特点有: ①、面向对象。主要是:封装,继承,多态。 ②、平台无关性。一次编写,到处运行,因此采用 Java 语言编写的程序具有很好的可移植性。 ③、支持多线程。C 语言没…

springboot基于session实现登录

文章目录 1.理解session2.理解ThreadLocal2.1 理解多线程2.2 理解lambda表达式2.3 ThreadLocal 3.基于session登录流程图4.具体登录的代码实现4.1短信发送功能4.2 短信验证码登录注册功能4.登录校验功能4.1 配置登录拦截器LoginInterceptor4.1.1 ThrealLocal类实现 4.2登录拦截…

【ArduPilot】Windows下使用Optitrack通过MAVProxy连接无人机实现定位与导航

Windows下使用Optitrack通过MAVProxy连接无人机实现定位与导航 配置动捕系统无人机贴动捕球配置无人机参数使用MAVProxy连接Optitrack1、连接无人机3、设置跟踪刚体ID4、校正坐标系5、配置IP地址(非Loopback模式)6、启动动捕数据推流 结语 在GPS信号弱或…

MSys2统一开发环境,快速搭建windows opencv环境

文章目录 摘要下载msys2安装Mingw64安装Cmake安装opencv报错一报错二问题一 摘要 本篇基于之前发布的opencv两篇文章,进行的流程简化,旨在优化windows opencv环境和实例运行,Msys2统一开发环境,有利于长远的开发环境,也简化了后续集成的难度…

基于单片机的多功能热水器设计(论文+源码)

1系统方案设计 基于单片机的多功能热水器系统,其系统框图如图2.1所示。主要采用了DS18B20温度传感器,HC-SR04超声波模块,STC89C52单片机,液晶,继电器等来构成整个系统。硬件上主要通过温度传感器进行水温的检测&am…

详解Sympy:符号计算利器

Sympy是一个专注于符号数学计算的数学工具,使得用户可以轻松地进行复杂的符号运算,如求解方程、求导数、积分、级数展开、矩阵运算等。其中比较流行的深度学习框架pytorch的用到了Sympy,主要用于将模型的计算图转换为符号化表达式,以便进行分…