MySQL中的ibd2sdi—InnoDB表空间SDI提取实用程序

ibd2sdi 是一个用于从 InnoDB 表空间文件中提取序列化字典信息(Serialized Dictionary Information, SDI)的实用程序。这个实用程序可以用于提取存储在持久化 InnoDB 表空间文件中的 SDI 数据。

可以对以下类型的表空间文件使用 ibd2sdi

  • 每个表一个文件(file-per-table tablespace files)的 .ibd 文件
  • 通用表空间文件(general tablespace files)的 .ibd 文件
  • 系统表空间文件(system tablespace files)的 ibdata* 文件
  • 数据字典表空间(data dictionary tablespace)的 mysql.ibd 文件

但是,它不支持用于临时表空间(temporary tablespaces)或撤销表空间(undo tablespaces)。

ibd2sdi 可以在运行时或服务器离线时使用。在 DDL 操作、ROLLBACK 操作以及与 SDI 相关的撤销日志清除操作期间,可能会存在一个短暂的时间窗口,使得 ibd2sdi 无法读取表空间中存储的 SDI 数据。

ibd2sdi 对指定的表空间执行未提交的 SDI 读取操作,并且不访问重做日志(redo logs)或撤销日志(undo logs)。

要调用 ibd2sdi 实用程序,你可以使用类似以下的命令:

ibd2sdi [options] file_name1 [file_name2 file_name3 ...]

ibd2sdi 支持多文件表空间,如 InnoDB 的系统表空间(ibdata* 文件),但每次只能对一个表空间文件进行操作。如果你想要对多文件表空间中的每个文件使用 ibd2sdi,你需要分别指定每个文件。

例如,如果你有一个名为 ibdata1 的系统表空间文件,并且想要提取其中的 SDI 信息,你可以这样做:

ibd2sdi ibdata1 ibdata2

当处理多文件表空间时,确实需要按照页面编号的升序来指定这些文件。如果两个连续的文件具有相同的空间ID(space ID),则后一个文件必须从前一个文件的最后一个页面编号+1开始。

ibd2sdi 实用程序将 SDI(包含 id、type 和 data 字段)以 JSON 格式输出。这是一个非常方便的方式,因为 JSON 是一种广泛支持的数据交换格式,可以被许多编程语言和其他工具轻松解析。

ibd2sdi 选项

以下是 ibd2sdi 的一些常用选项,以及它们的简要说明:

显示帮助消息并退出。例如:

Usage: ./ibd2sdi [-v] [-c <strict-check>] [-d <dump file name>] [-n] filename1 [filenames]
See http://dev.mysql.com/doc/refman/8.0/en/ibd2sdi.html for usage hints.-h, --help          Display this help and exit.-v, --version       Display version information and exit.-#, --debug[=name]  Output debug log. Seehttp://dev.mysql.com/doc/refman/8.0/en/dbug-package.html-d, --dump-file=nameDump the tablespace SDI into the file passed by user.Without the filename, it will default to stdout-s, --skip-data     Skip retrieving data from SDI records. Retrieve only idand type.-i, --id=#          Retrieve the SDI record matching the id passed by user.-t, --type=#        Retrieve the SDI records matching the type passed byuser.-c, --strict-check=nameSpecify the strict checksum algorithm by the user.Allowed values are innodb, crc32, none.-n, --no-check      Ignore the checksum verification.-p, --pretty        Pretty format the SDI output.If false, SDI would be nothuman readable but it will be of less size(Defaults to on; use --skip-pretty to disable.)Variables (--variable-name=value)
and boolean options {FALSE|TRUE}  Value (after reading options)
--------------------------------- ----------------------------------------
debug                             (No default value)
dump-file                         (No default value)
skip-data                         FALSE
id                                0
type                              0
strict-check                      crc32
no-check                          FALSE
pretty                            TRUE

显示版本信息并退出。例如:

ibd2sdi  Ver 8.0.3-dmr for Linux on x86_64 (Source distribution)

打印调试日志。

ibd2sdi --debug=d:t /tmp/ibd2sdi.trace

只有使用WITH_DEBUG构建MySQL时,此选项才可用。Oracle提供的MySQL版本二进制文件不是使用此选项构建的。

将序列化的字典信息(SDI)转储到指定的转储文件中。如果未指定转储文件,则表空间SDI将转储到stdout。

ibd2sdi --dump-file=file_name ../data/test/t1.ibd

跳过从序列化字典信息(SDI)中检索数据字段值,仅检索id和类型字段值,这是SDI记录的主键。

$> ibd2sdi --skip-data ../data/test/t1.ibd
["ibd2sdi"
,
{"type": 1,"id": 330
}
,
{"type": 2,"id": 7
}
]

检索与指定的表或表空间对象id匹配的序列化字典信息(SDI)。对象id对于对象类型是唯一的。表和表空间对象id也可以在mysql.tables和mysql.tablespace数据字典表的id列中找到。

$> ibd2sdi --id=7 ../data/test/t1.ibd
["ibd2sdi"
,
{"type": 2,"id": 7,"object":{"mysqld_version_id": 80003,"dd_version": 80003,"sdi_version": 1,"dd_object_type": "Tablespace","dd_object": {"name": "test/t1","comment": "","options": "","se_private_data": "flags=16417;id=2;server_version=80003;space_version=1;","engine": "InnoDB","files": [{"ordinal_position": 1,"filename": "./test/t1.ibd","se_private_data": "id=2;"}]}
}
}
]

检索与指定对象类型匹配的序列化字典信息(SDI)。SDI是为表(类型=1)和表空间(类型=2)对象提供的。

此示例显示了测试数据库中表空间ts1的输出:

$> ibd2sdi --type=2 ../data/test/ts1.ibd
["ibd2sdi"
,
{"type": 2,"id": 7,"object":{"mysqld_version_id": 80003,"dd_version": 80003,"sdi_version": 1,"dd_object_type": "Tablespace","dd_object": {"name": "test/ts1","comment": "","options": "","se_private_data": "flags=16417;id=2;server_version=80003;space_version=1;","engine": "InnoDB","files": [{"ordinal_position": 1,"filename": "./test/ts1.ibd","se_private_data": "id=2;"}]}
}
}
]

由于InnoDB处理默认值元数据的方式,在给定表列的ibd2sdi输出中,即使没有使用default定义,默认值也可能存在且不为空。考虑在名为i的数据库中使用以下语句创建的两个表:

CREATE TABLE t1 (c VARCHAR(16) NOT NULL);CREATE TABLE t2 (c VARCHAR(16) NOT NULL DEFAULT "Sakila");

使用ibd2sdi,我们可以看到c列的default_value是非空的,实际上在两个表中都填充了长度,如下所示:

$> ibd2sdi ../data/i/t1.ibd  | grep -m1 '\"default_value\"' | cut -b34- | sed -e s/,//
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="$> ibd2sdi ../data/i/t2.ibd  | grep -m1 '\"default_value\"' | cut -b34- | sed -e s/,//
"BlNha2lsYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="

使用像jq这样的JSON感知实用程序可以更容易地检查ibd2sdi输出,如下所示:

$> ibd2sdi ../data/i/t1.ibd  | jq '.[1]["object"]["dd_object"]["columns"][0]["default_value"]'
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="$> ibd2sdi ../data/i/t2.ibd  | jq '.[1]["object"]["dd_object"]["columns"][0]["default_value"]'
"BlNha2lsYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="

指定一种严格的校验和算法,用于验证所读取页面的校验和。选项包括innodb、crc32和none。

在本例中,指定了innodb校验和算法的严格版本:

ibd2sdi --strict-check=innodb ../data/test/t1.ibd

在本例中,指定了crc32校验和算法的严格版本:

ibd2sdi -c crc32 ../data/test/t1.ibd

如果没有指定--strict check选项,则会对非严格的innodb、crc32和none校验和执行验证。

跳过已读取页面的校验和验证。

ibd2sdi --no-check ../data/test/t1.ibd

输出JSON pretty 打印格式的SDI数据。默认情况下已启用。如果禁用,则SDI不是人类可读的,但尺寸较小。使用--skip-pretty 来禁用。

ibd2sdi --skip-pretty ../data/test/t1.ibd

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

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

相关文章

DDS信号的发生器(验证篇)——FPGA学习笔记8

前言&#xff1a;第一部分详细讲解DDS核心框图&#xff0c;还请读者深入阅读第一部分&#xff0c;以便理解DDS核心思想 三刷小梅哥视频总结&#xff01; 小梅哥https://www.corecourse.com/lander 一、DDS简介 DDS&#xff08;Direct Digital Synthesizer&#xff09;即数字…

OneNote for Windows 10 下载

OneNote for Windows 10 安装 1.在浏览器中输入地址&#xff1a;https://apps.microsoft.com/detail/9wzdncrfhvjl?hlzh-cn&glUS2OneNote for Windows 10 - 在 Windows 上免费下载并安装 |Microsoft StoreOneNote 是用于在设备上捕获和组织你的一切内容的数字笔记本。快速…

BUG cn.bing.com 重定向的次数过多,无法搜索内容

BUG cn.bing.com 重定向的次数过多&#xff0c;无法搜索内容 环境 windows 11 edge浏览器详情 使用Microsoft Edge 必应搜索显示"cn.bing.com"重定向次数过多&#xff0c;无法进行正常的检索功能 解决办法 检查是否开启某些科_学_上_网&#xff08;翻_墙&#xf…

轻松重命名Windows用户Users目录下的文件夹名称

设置系统还原点 为避免设置失败&#xff0c;需提前准备好系统还原点以备份恢复系统。 打开系统属性&#xff1a; 在“系统保护”选项卡中&#xff0c;选择你想要保护的系统驱动器&#xff08;通常是C:驱动器&#xff09;。 点击“配置”按钮。 在弹出的窗口中&#xff0c;选…

【Python机器学习】NMF——将NMF应用于模拟信号数据

假设我们对一个信号感兴趣&#xff0c;它是由三个不同信号源合成的&#xff1a; import matplotlib.pyplot as plt import mglearnSmglearn.datasets.make_signals() plt.figure(figsize(6,1)) plt.plot(S,-) plt.xlabel(Time) plt.ylabel(Signal) plt.show()不幸的是&#xff…

大厂面试官问我:布隆过滤器有不能扩容和删除的缺陷,有没有可以替代的数据结构呢?【后端八股文二:布隆过滤器八股文合集】

往期内容&#xff1a; 面试官问我&#xff1a;Redis处理点赞&#xff0c;如果瞬时涌入大量用户点赞&#xff08;千万级&#xff09;&#xff0c;应当如何进行处理&#xff1f;【后端八股文&#xff08;1&#xff09;】-CSDN博客 本文为【布隆过滤器八股文合集】初版&#xff0c…

数据结构:冒泡排序,选择排序,插入排序,希尔排序的实现分析

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 小新的主页&#xff1a;编程版小新-CSDN博客 1.冒泡排序 1.1算法思想 冒泡排序的基本思想就是&a…

字节跳动:从梦想之芽到参天大树

字节跳动掌舵人&#xff1a;张一鸣 2012年&#xff1a;梦想的起点&#xff1a;在一个阳光明媚的早晨&#xff0c;北京的一座普通公寓里&#xff0c;一位名叫张一鸣的年轻人坐在电脑前&#xff0c;眼中闪烁着坚定的光芒。他的心中有一个梦想——通过技术改变世界&#xff0c;让…

嵌入式实验---实验六 I2C传输实验

一、实验目的 1、掌握STM32F103I2C传输程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、本案例利用I/O端口通过KEY01按键来控制STM32F103R6向24C02写入“hello”&#xff0c;通过另外一个按键KEY02来控制STM32F103R6从24C02读取“hello”&#x…

又一个前后端分离的整合了OpenAI大模型的高并发、高性能和可扩展的项目完结了,写到简历上,嘎嘎强!

大家好&#xff0c;我是冰河~~ 经过四个多月的坚持&#xff0c;《分布式IM即时通讯系统》终于完结了&#xff0c;也感谢大家这四个多月以来的坚持和陪伴&#xff0c;也相信大家在《分布式IM即时通讯系统》专栏中&#xff0c;学到了不少知识和技术。接下来&#xff0c;我们就一…

[C++][设计模式]介绍

目录 1.设计模式1.何为设计模式&#xff1f;2.深入理解面向对象3.软件设计的目标4.三大模式及其特点5.设计模式分类 2.面向对象设计原则1.为什么要面向对象2.重新认识面向对象3.面向对象设计原则4.C对象模型 3.重构1. 重构获得模式(Refactoring to Patterns)2.重构关键技法 4.代…

【Oracle】实验二 体系结构、存储结构与各类参数

【实验目的】 理解Oracle体系结构了解初始化参数文件以及初始化参数的含义掌握查看三类数据字典视图和动态性能视图的方法 【实验内容】 如何查看初始化参数&#xff1f;有哪几种方法&#xff1f;初始化参数文件有几种&#xff1f;默认的保存位置在哪里&#xff1f;在SQL*Pl…

【开发】内网穿透ztncui搭建私有节点

文章目录 写在前面一键部署ztnuci记录后续 写在前面 前面搭建moon节点转发的确会降低延迟&#xff0c;但是总有出现moon节点解析不成功的例子&#xff0c;于是疯狂寻找答案是为什么&#xff1f;终于在知乎上找到这样一个答案。 一键部署ztnuci 参考这篇很完善的教程和贴心的…

AI味太重怎么办?1个超简单的方法就能解决

我们知道随着GPT技术的迅速发展&#xff0c;解决了我们大部分写作的难题。但是很多小伙伴想必都会遇到同样的问题&#xff0c;就是写出来的文章太正式-我们叫这“AI味”。 这AI味让人感觉内容虽然条理清楚&#xff0c;但就是缺了点人情味&#xff0c;读起来不够亲切。 其实&a…

基于YOLOv5的口罩佩戴检测系统的设计与实现(PyQT页面+YOLOv5模型+数据集)

简介 在各种工作环境和公共场所,确保人们正确佩戴口罩对个人防护和公共卫生至关重要,尤其是在医疗设施、制造业车间和拥挤的公共交通中。为了满足这一需求,我们开发了一种基于YOLOv5目标检测模型的口罩佩戴检测系统。本项目不仅实现了高精度的口罩佩戴检测,还设计了一个可…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验6 生成树协议STP的功能

一、实验目的 1.验证以太网交换机生成树协议的功能&#xff1b; 2.理解网络环路对网络的负面效应&#xff1b; 3.理解生成树协议的作用。 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实…

图解注意力

图解注意力 Part #2: The Illustrated Self-Attention 在文章前面的部分&#xff0c;我们展示了这张图片来展示自注意力被应用于正在处理单词"it"的一层中&#xff1a; 在本节中&#xff0c;我们将看看这是如何完成的。请注意&#xff0c;我们将以一种试图理解单…

网卡故障但bond0不切换原因及处理、脚本监控bond0网卡状态并做相应操作

文章目录 故障说明监控脚本脚本编写脚本测试正常场景异常场景1异常场景2脚本准备和修改网卡名脚本拷贝到所有需要监控主机修改网卡名批量执行脚本故障说明 在一次交换机升级的割接中,主备交换机重启的时候,我们发现了一个问题,有几台宿主机会中断【ping不通】,交换机重启完…

Typora最新安装教程2024

Typora是一款广受好评的跨平台Markdown编辑软件&#xff0c;支持Windows、MacOS和Linux操作系统。它的设计旨在提供一个无干扰、高效且直观的写作环境。户快速管理和查找文档&#xff0c;支持直接在软件内浏览和操作文件结构。 Typora以其简洁而强大的功能集合&#xff0c;成为…

Java模拟马尔可夫链类问题的验证

马尔可夫链&#xff08;Markov Chain, MC&#xff09;是概率论和数理统计中具有马尔可夫性质&#xff08;Markov property&#xff09;且存在于离散的指数集&#xff08;index set&#xff09;和状态空间&#xff08;state space&#xff09;内的随机过程&#xff08;stochasti…