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 是用于在设备上捕获和组织你的一切内容的数字笔记本。快速…

为什么 C++ 允许不安全的代码(Bjarne Stroustrup)

为什么 C 允许不安全的代码? 也就是说&#xff0c;为什么 C 支持可以用来违反静态&#xff08;编译时&#xff09;类型安全规则的操作&#xff1f; 为了直接访问硬件&#xff08;例如&#xff0c;把整数当作指向设备寄存器的指针&#xff09;为了获取最佳的运行时效率和空间…

Content Provider:深入解析Android数据共享的核心组件

在Android开发中&#xff0c;Content Provider是一个重要的组件&#xff0c;它允许应用程序之间共享数据。它扮演着“数据访问中间层”的角色&#xff0c;为不同应用程序提供了一个统一的数据访问接口。以下将从技术难点、面试官关注点、回答吸引力以及代码举例四个方面&#x…

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

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

jQuery中Validate方法总结

jQuery中Validate方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; jQuery Validate是一个流行的jQuery插件&#xff0c;用于在客户端对表单进行验证。它…

轻松重命名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…

由浅入深,走进深度学习(4)

各位小伙伴大家好&#xff0c;这期内容是深度学习基础的一个进阶&#xff0c;也可以说是夯实一下很多细节内容 个人感受&#xff1a;动手敲一遍&#xff0c;带着思考&#xff0c;会有不一样的感受&#xff01;&#xff01;&#xff01; 代码是比较多的&#xff0c;有很多内容…

全局变量和局部变量

全局变量未初始化&#xff0c;则它的值为0&#xff1b; 局部变量未初始化&#xff0c;则它的值为随机值&#xff1b; 局部变量的作用域是变量所在的局部范围; 全局变量的作用域是整个工程; 生命周期&#xff1a; 变量的生命周期指的是变量从创建到销毁的整个阶段。 局部变量的生…

react实现路由拦截器

1. 路由拦截的概念 路由拦截&#xff1a;在用户导航到某个路由之前&#xff0c;通过某种逻辑来拦截、检查或修改导航行为。它可以用于实现权限控制、身份验证、页面加载前的准备工作等场景。 2. React Router中的路由拦截实现 2.1 使用<Route>组件的render属性 在Rea…

每天一个项目管理概念之关键路径

在项目管理中&#xff0c;关键路径分析&#xff08;Critical Path Method, CPM&#xff09;是计划和控制项目时间表的重要工具。关键路径是项目网络图中从开始到结束的最长路径&#xff0c;它确定了完成整个项目所需的最短时间。任何关键路径上的任务延误都将直接导致整个项目延…

mysql插入blob或longblob的字符串

mysql字段格式是blob的时候&#xff0c;直接插入字符串会异常 insert table (str),values (aaaa)会异常 需要将字符串转为0x格式的16进制字符串才行 aaaa转换之后为61616161 insert table (str),values (0x61616161)java将字符串转16进制字符串 "0x"DatatypeConver…

使用zdppy结合onlyoffice开发第一个网页文档应用

docserver环境搭建 禁用JWT 加载镜像&#xff1a; docker load -i docserver:7运行容器&#xff1a; docker run -itd -p 8080:80 --name docserver -e JWT_ENABLEDfalse --restartalways onlyoffice/documentserver:7.3.2docker run -itd -p 8080:80 --name docserver -…

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

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

如何使用Java实现高效的多线程编程

如何使用Java实现高效的多线程编程 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 在当今软件开发领域中&#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;我们就一…