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. See
                      http://dev.mysql.com/doc/refman/8.0/en/dbug-package.html
  -d, --dump-file=name
                      Dump 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 id
                      and type.
  -i, --id=#          Retrieve the SDI record matching the id passed by user.
  -t, --type=#        Retrieve the SDI records matching the type passed by
                      user.
  -c, --strict-check=name
                      Specify 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 not
                      human 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

消息认证码解析

1. 什么是消息认证码 消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术&#xff0c;取三个单词的首字母&#xff0c;简称为MAC。 消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥&#xff0c;它可以输出固定长度的数据&#x…

C语言之详解预处理

前言&#xff1a; 预处理也叫预编译&#xff0c;是编译代码时的第一步&#xff0c;经过预处理后生成一个.i文件&#xff0c;如果不明白编译与链接作用的小伙伴可以先看看博主的上一篇博客—— &#xff0c;不然知识连贯性可能会显得很差哦。 正文目录&#xff1a; 预定义符号#…

discuz迪恩cul!教育课程培训网站模板

Discuz x3.2模板 迪恩cul!教育课程培训 GBK&#xff0c;程序包中内附详细的安装教程&#xff0c;下载后按照教程安装即可 discuz迪恩cul!教育课程培训网站模板

qemu 安装ubuntu22.04虚拟机 -纯命令行-可ssh-带网络-编译安装 linux kernel-编译安装 kernel module

tar -xjf xxx.tar.bz2 1&#xff0c;预备系统盘数据 1.1 下载光盘 注意需要 liver-server $ wget https://releases.ubuntu.com/22.04.4/ubuntu-22.04.4-live-server-amd64.iso 1.2 挂载并拷贝 $ sudo mkdir /mnt/iso_ubuntu-22.04.4-live-server-amd64 $ sudo mount u…

星闪指向遥控,做家电交互的破壁人

“面壁者罗辑&#xff0c;我是你的破壁人。” 科幻小说《三体》中&#xff0c;当人类的基础科学被三体人封锁&#xff0c;变得停步不前&#xff0c;人类启动了自救的面壁计划&#xff0c;通过一次又一次破壁&#xff0c;找到战胜三体人的办法。 现实中&#xff0c;有一点已经成…

html--好看的手机充值单页

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>线上充值-首页</title><meta content"widthdevice-width,initial-scale1.0,maximum-scale1.0,user-scalable0" name"viewport&…

【Vue-Vben-Admin】1、初次运行和介绍

【Vue-Vben-Admin】1、初次运行和介绍 Vben-Admin 初次运行和介绍 小小的介绍规定版本文件树安装依赖运行项目 小小的介绍 一款 Vue3 Typescript4 Vite2 后台管理项目&#xff0c;功能挺多的&#xff0c;还有组件库 规定版本 此个人文档规定版本为 2.8.0&#xff0c;可能版本…

AI大模型企业应用实战(16)-langchain核心组件

1 stuff 将文档列表插入到提示词中&#xff0c;适合文档较小或少量文档的应用。 2 refine 通过循环输入文档并迭代更新答案来构建响应&#xff0c;一次只传递给LLM一个文档&#xff0c;适合LLM上下文大小不能容纳的小文档。 参考&#xff1a; https://js.langchain.com/v0.1…

QT中利用qss来创建一个圆角矩形窗口,并利用Qt::WA_TranslucentBackground属性解决留白问题

1、效果 2、实现 QWidget#centralwidget {border-radius: 30px solid default;border-image: url(:/images/bk<

【Golang - 90天从新手到大师】Day06 - 数组

系列文章合集 Golang - 90天从新手到大师 数组是golang中最常用的一种数据结构,数组就是同一类型数据的有序集合 定义一个数组 格式: var name [n]type n为数组长度,n>0 且无法修改,type为数组的元素类型如: var a [2]int上面的例子定义了一个长度为2,元素类型为int的数组…

MySQL数据库(三):读取数据库数据

上一节&#xff0c;我们介绍了数据库的基本操作&#xff0c;以及最后演示了如何使用库来连接数据库&#xff0c;在实际应用中&#xff0c;我们通常需要按照指定的条件对数据库进行操作&#xff0c;即增删改查操作&#xff0c;这是非常重要的&#xff01;这一节我们继续通过一个…

Open3D 点云FPS最远点下采样

目录 一、概述 二、代码实现 2.1实现原理 2.2完整代码 三、实现效果 3.1原始点云 3.2采样后点云 3.3数据对比 一、概述 最远点采样&#xff08;Farthest Point Sampling, FPS&#xff09;是一种有效的下采样方法&#xff0c;用于从大量点云数据中选择具有代表性的子集。…

Fine-tuning在垂直领域的最佳实践指南

对于Fine-tuning是深度学习和机器学习领域一个特别重要的概念&#xff0c;并且每个企业的实践方式也会有所不同&#xff0c;今天我们就来聊一聊Fine-tuning。 什么是Fine-tuning Fine-tuning指的是模型微调&#xff0c;通常是指在一个预训练模型的基础上&#xff0c;通过在特…

redis数据库备份,回档,迁移工具使用

相信很多服务器开发者或者运维同学都遇到过这样的场景,比如我要从阿里云的redis集群把数据迁移到另外一个账号下的或者另外一个云服务商的redis集群,或者单机,或者哨兵模式redis实例,那么这种情况下我推荐给大家一款非常好用的工具,可以无缝的从A集群/单机/哨兵/已有的数据…

安装虚拟环境

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Flask依赖两个外部库&#xff1a;Werkzeug和Jinja2。Werkzeug是一个WSGI&#xff08;在Web应用和多种服务器之间的标准 Python 接口&#xff09;工具…

频率和时间单位换算表

1. 频率单位和计数单位的换算关系 1.1 频率换算关系 1 MHz 等于 10^6 Hz 1.2 常用计数单位及其换算关系 1000 K 1 M 1000 M 1 G 分别表示&#xff1a; K (千) 10^3 M (兆) 10^6 G (吉) 10^9 2. 时间与频率的关系 频率&#xff08;Frequency&#xff09;和周期&#xff0…

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法…

使用Let‘s Encrypt 申请通配符证书

为什么不使用阿里云/腾讯云等公有云厂商提供的免费证书? 上篇介绍了从阿里云上面申请免费证书,有效期一年 为网站配置https证书 公有云提供的证书不支持通配符&#xff0c;只支持某个确定的解析。 不管是二级域名还是三级域名&#xff0c;只要是具体的确定的地址&#xff0c;都…

记MySQL事务+消息队列引起的问题

问题描述&#xff1a; 先说一下流程&#xff1a;后端保存前端提交的图表信息&#xff0c;然后发送异步消息到消息队列&#xff0c;由下游服务去处理图表信息。 部署项目到服务器&#xff0c;验证项目功能的时候&#xff0c;出现了以下错误&#xff1a;数据库存在数据。下游服…

【服务器07】之【GitHub项目管理】及【Unity异步加载场景】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字&#xff0c;点击创建存储库就可以了 现在我们下载Fork Fork - a fast and friendly git client for Mac and Windows (git-fork.com) 免费的 下载完成之后点击File下的Clone …