MySQL查看Innodb数据文件

如何在MySQL中查看InnoDB版本 InnoDB是MySQL数据库引擎的一部分,它是用于处理事务和提供数据一致性的关键组件。在某些情况下,您可能需要查看当前正在使用的InnoDB版本。在输出的开头部分,您可以找到"InnoDB"关键字并在其后找到版本号。通过执行上述步骤,您可以在MySQL中轻松查看当前正在使用的InnoDB版本。这对于了解您的数据库环境非常有用,并在必要时进行版本相关的操作和决策提供了帮助。请注意,上述方法适用于MySQL数据库。对于其他数据库管理系统或特定版本的MySQL,可能存在不同的方法来查看InnoDB版本。 阅读详情

 

  • bcview

#https://blog.youkuaiyun.com/weixin_34409741/article/details/90253307
#https://www.jianshu.com/p/719f1bbb21e8

 

 

  • innblock

 

#https://github.com/gaopengcarl/innblock
工具有2个功能:
scan功能用于查找ibd文件中所有的索引页
analyze功能用于扫描数据块里的row data

scan功能
[root@test test]# ./innblock  testblock.ibd scan 16
analyze功能
[root@test test]# ./innblock  testblock.ibd 3 16

innblock的限制:
不支持REDUNDANT行格式的数据文件.
只支持LINUX x64平台.
本工具直接读取物理文件,部分dirty page可能延时刷盘而未能被读取到,可以让InnoDB及时刷盘再重新读取.
最好在MySQL 5.6/5.7版本下测试.
只能解析索引页,不支持inode page、undo log等类型的page.
scan功能会包含delete后的索引块和drop了的索引块.
不能读取详细的row data.
建议采用独立表空间模式,更便于观察.

 

 

  • 测试

 

create table testblock (
id1 int primary key,
name varchar(30),
id3 int,
key(name),
key(id3));
insert into testblock values(1,'gao',1),(2,'gao',2),
(3,'gao',3),(4,'gao',4);
delete from testblock where id1=1;

 

 

  • scan

 

#测试scan功能,扫描所有index page
[root@k8s-master01 tmp]# ./innblock  /data/mysql/data/test/testblock.ibd scan 16
----------------------------------------------------------------------------------------------------
Welcome to use this block analyze tool:
[Author]:gaopeng [Blog]:blog.itpub.net/7728585/abstract/1/ [QQ]:22389860
[Review]:yejinrong@zhishutang [Blog]:imysql.com [QQ]:4700963
----------------------------------------------------------------------------------------------------
Datafile Total Size:131072
===INDEX_ID:41
level0 total block is (1)
block_no:         3,level:   0|*|
===INDEX_ID:42
level0 total block is (1)
block_no:         4,level:   0|*|
===INDEX_ID:43
level0 total block is (1)
block_no:         5,level:   0|*|

#我们发现有3个索引,INDEX_ID 41 42 43

#查看数据字典
use information_schema;
SELECT A.SPACE AS TBL_SPACEID, A.TABLE_ID, A.NAME AS TABLE_NAME, FILE_FORMAT, ROW_FORMAT, SPACE_TYPE,  B.INDEX_ID , B.NAME AS INDEX_NAME, PAGE_NO, B.TYPE AS INDEX_TYPE  FROM INNODB_SYS_TABLES A  LEFT JOIN INNODB_SYS_INDEXES B ON A.TABLE_ID =B.TABLE_ID  WHERE A.NAME = 'test/testblock';

 

  • analyze

 

./innblock  /data/mysql/data/test/testblock.ibd 3 16

 

 

  • Block base info

 

block_noFIL_PAGE_OFFSET
索引页码(index page no),该页相对于表空间的偏移量,从0开始计数。如果page no = 3,则实际上是第4个index page
space_idFIL_PAGE_SPACE_ID
索引页所属的表空间ID,可以在 INNODB_SYS_TABLES、INNODB_SYS_TABLESPACES、INNODB_SYS_DATAFILES 等系统视图中查看
index_idPAGE_INDEX_ID
本索引页所属的索引ID,可以在 INNODB_SYS_INDEXES 系统视图中查看
slot_numsPAGE_N_DIR_SLOTS
 本索引页中所包含的slot(槽)的数量
heaps_rowsPAGE_N_HEAP
本索引页中的全部记录数量,这其中包含了已经deleted且已被purged的记录(这种记录会被放到索引页的garbage队列中),以及两个伪记录INFIMUM/SUPREMUM
n_rows 本索引页中的记录数,不含deleted且已被purged的记录,以及两个伪记录INFIMUM、SUPREMUM
heap_topPAGE_HEAP_TOP
指向本索引页已分配的最大物理存储空间的偏移量
del_bytesPAGE_GARBAGE
本索引页中所有deleted了的且已被purged的记录的总大小
last_ins_offsetPAGE_LAST_INSERT
指向本索引页最后插入记录的位置偏移量,如果最后操作是delete,则这个偏移量为空。通过判断索引页内数据最后插入的方向,用于索引分裂判断
page_dirPAGE_DIRECTION
本索引页中数据最后插入的方向,同样用于索引分裂判断
page_n_dirPAGE_N_DIRECTION
向同一个方向插入数据的行数,同样用于索引分裂中进行判断
leaf_inode_space leaf_inode_pag_no leaf_inode_offsetleaf segment postion and in inode block offset,only root block(PAGE_BTR_SEG_LEAF开始 10字节)
no_leaf_inode_space no_leaf_inode_pag_no no_leaf_inode_offset(取自PAGE_BTR_SEG_TOP 开始 10字节) 这6个值只在root节点会有信息,分别表示了叶子段和非叶子段的inode的位置和在inode块中的偏移量,其他块都为0
last_modify_lsn(FIL_PAGE_LSN) 本块最后一次修改的LSN
page_type(FIL_PAGE_TYPE) 对于本工具而言始终为B+ TREE,因为不支持其它page type
level(PAGE_LEVEL) 本索引页所处的B+ TREE的层级。注意,叶子结点的PAGE LEVEL为0

 

 

  • Block list info

 

Total used rows:5 used rows list(logic)这个链表是逻辑有序链表,也是我们平时所说的块内数据有序的展示。它的顺序当然按照主键或者ROWID进行排列,因为是通过物理偏移量链表实现的,实际上就是逻辑上有序。我在实现的时候实际上是取了INFIMUM的偏移量开始进行扫描直到最后,但是注意被deleted且已经被purged的记录不在其中
Total used rows:5 used rows list(phy)这个链表是物理上的顺序,实际上就是heap no的顺序,我在实现的时候实际上就是将上面的逻辑链表按照heap no进行排序完成的,所以块内部是逻辑有序物理无序的,同样注意被deleted且已被purged的记录不在其中
Total del rows:1 del rows list(logic)这个链表是逻辑上的,也就是被deleted且被purged后的记录都存在于这个链表中,通过读取块的PAGE_FREE获取链表信息
Total slot:2 slot list这是slot(槽的)信息,通过扫描块尾部8字节以前信息进行分析得到,我们可以发现在slot中存储的是记录的偏移量

 

record offsetreal offset in block of this record.
heapnophysics heapno of this record.
n_ownedif this record is slot record n_owned is how many this slot include,other is 0.
delflagthis record is delete will Y,if not purge in list 1,if purge in list 3.
rectype[REC_STATUS_ORDINARY=0(B+ leaf record) [REC_STATUS_NODE_PTR=1(not B+ leaf record)] [REC_STATUS_INFIMUM=2] [REC_STATUS_SUPREMUM=3]
slot offsetwhere(offset) this slot point,this is a record offset.no purge delete record.
n_ownedhow many this slot include recorods.no purge delete record.

 

 

 

  • 测试

 

create table testblock (
id1 int primary key,
name varchar(30),
id3 int,
key(name),
key(id3)
);
insert into testblock values(1,'gao',1),(2,'gao',2),
(3,'gao',3),(4,'gao',4);

发起事务,先执行delete,暂不commit
mysql> begin; delete from testblock where id1=1;
#
./innblock  /data/mysql/data/test/testblock.ibd 3 16

 

  • 执行delete后还未commit的记录只打 delete 标记

 

其 delflag = Y,offset = 127,这条记录只是delete,但还没 commit,也还没被 purged,因此不会出现在 del rows list链表中。
同时注意到几个信息:
del_bytes:0
n_rows:4
heaps_rows:6
三个信息结合起来看,表示还没有真正被清除的数据

 

  • 执行delete后commit的记录,被purged后真正被清除,进入删除链表

 

#提交
mysql> commit;

 

执行commit,这条偏移量为127的记录被purged后入了del rows list链表
delflag = Y,同时我们观察到
del_bytes:31 上一次看到的值是 0
n_rows:3 上一次看到的值是 4
heaps_rows:6 和上一次的值一样,因为这里计算的是物理记录数
可见,commit且被purged的数据才是真正的删除(清除)

 

  • 先删除后insert更大新记录,旧的heap no不会重用

 

insert into testblock values(5,'gaopeng',1);

 

这条记录的heapno = 6,而删除的旧记录 heapno=2,这表明它没有重用del rows list中的空间,因为删除记录的空间根本放不下这条新记录,所以只能重新分配。同时我们注意到 heap_top = 279 ,这里也发生了变化,体现了实际为这行数据分配了新的heapno

 

  • delete后,再insert更小或者相同大小记录,heap no会重用

 

insert into testblock values(6,'gao',1);

 

我们发现heapno=2的记录 delflag 不再是 Y了,同时 heap_top = 279 也没有变化,del_bytes:31 变成了 del_bytes:0,都充分说明了这块空间得到重用

 

  • 测试del list中的空间重用只会检测第一个条删除的记录

 

delete from testblock;
insert into testblock values(1,'gao',1),(2,'gao',2),(3,'gao',3),(4,'gaopeng',4);
delete from testblock where id1=4;
delete from testblock where id1=3;
insert into testblock values(5,'gaopeng',5);

 

在这里,我们先删除 [id1=4] 记录,后删除 [id1=3] 记录。 由于del list是头插法,所以后删除的 [id1=3] 的记录会放在del list链表的最头部,也就是 [del list header] => [id1=3] => [id1=4]。虽然 [id=4] 的记录空间足以容下新记录 (5,'gaopeng’,5),但并没被重用。因为InnoDB只检测第一个 del list 中的第一个空位 [id1=3],显然这个记录空间不足以容下新记录 (5,’gaopeng',5),所以还是新开辟了heap。

我们看到 del list 中共有2条记录(没被重用),却新增加了 heapno = 6 的记录

 

  • del_bytes(PAGE_GARBAGE)是否包含碎片空间

 

delete from testblock;
insert into testblock values(1,'gao',1),(2,'gao',2),(3,'gao',3),(4,'gaopeng',4);
delete from testblock where id1=4;

 

注意这里 del_bytes:35 就是删除这条记录的空间的使用量

 

insert into testblock values(5,'gao',5);

 

注意到 del_bytes:4,这个刚好就是 'gaopeng' 7字节减去 'gao' 3字节剩下的4字节,我们也看到了 [heapno=5] MySQL查看Innodb数据文件这个记录被重用了(del list为空,heaono=5的记录 delflag 不为 Y)。

 

#文档参考https://mp.weixin.qq.com/s/yfi5XikDJlh6-nS-eoJbcA

 

查看mysql的ibd文件的工具,可以查看ibd文件中页的分布及类型等信息,本作品是重制版,添加了UI,并且支持中英.zip 查看mysql的ibd文件的工具,可以查看ibd文件中页的分布及类型等信息,本作品是重制版,添加了UI,并且支持中英 立即下载

相关推荐

MySQL数据库InnoDB数据恢复工具的使用小结详解

本文从实际使用经验出发,介绍一款开源的MySQL数据库InnoDB数据恢复工具:innodb-tools,它通过从原始数据文件中提取表的行记录,实现从丢失的或者被毁坏的MySQL表中恢复数据。例如,当你不小心执行DROP TABLE、TRUNCATE TABLE或者DROP DATABASE之后,可以通过以下方式恢复数据。以下内容大部分参考自:Percona Data Recovery Tool for InnoDB,文档是英文的,而且写的比较晦涩,这里是个人的实战经验总结,供大家参考学习。在介绍innodb-tools工具进行数据恢复之前,首先明确以下几点:1、这个工具只能对InnoDB/X

MySQL数据库InnoDB数据恢复工具使用总结

本文从实际使用经验出发,介绍一款开源的MySQL数据库InnoDB数据恢复工具:innodb-tools,它通过从原始数据文件中提取表的行记录,实现从丢失的或者被毁坏的MySQL表中恢复数据。例如,当你不小心执行DROP TABLE、TRUNCATE TABLE或者DROP DATABASE之后,可以通过以下方式恢复数据。 在介绍innodb-tools工具进行数据恢复之前,首先明确以下几点: 1、这个工具只能对InnoDB/XtraDB表有效,而无法恢复MyISAM表(注: Percona号称有一套用于恢

xiaochengxuyuan1的博客 1360

Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)

蜡烛图指标为识别K线形态的指标,笔者认为重点在于定义方式所提供的思路,背后的投资逻辑可以借鉴但不建议直接参考文档的翻译内容和源码逻辑存在不一致的现象,笔者分别列出中文百科中的定义和源码实际逻辑,供大家参考技术分析理论中的一些模糊词,ta-lib中给出了精确的定义源码

量化就是探索生活 3254

【MySQL】Innodb 恢复工具介绍

在和数据打交道的过程中,总会遇到误删除数据的情况,在没有备份和binlog的情况下,如何恢复呢?本文介绍一个工具Percona Data Recovery Tool for InnoDB  使用 该工具的 注意事项: 1 The tools work only for InnoDB/XtraDB tables, and will not work with MyISAM tables. Per

vivenwan的博客 1898

实战解析:在.NET中实现Dify API流式请求与响应的完整方案

本文详细解析了在.NET应用中对接Dify API时实现流式请求与响应的完整方案。针对传统后端“接收完才返回”的痛点,文章提供了基于ASP.NET Core的实战代码,通过配置HttpCompletionOption.ResponseHeadersRead和手动Flush响应流,构建高效的中转管道,确保AI回复能够像ChatGPT一样实时逐字推送到前端,显著提升用户体验。

weixin_29267307的博客 296

STM32H743+YT8512C以太网通信实战:CubeMX与LWIP配置详解

本文详细解析了基于STM32H743微控制器与YT8512C PHY芯片的以太网通信实战方案。通过CubeMX工具进行RMII接口、MPU、时钟树等关键硬件配置,并重点阐述了如何修改LWIP协议栈驱动代码以适配YT8512C芯片,解决了LAN8742驱动不兼容的问题。文章提供了从工程创建、代码适配到调试验证的完整步骤,帮助开发者快速实现稳定可靠的嵌入式网络连接。

weixin_29190573的博客 561

MySQL InnoDB数据恢复工具

[size=medium]之前一直以为mysql坏了innodb数据库就完了,今天看到个工具可以恢复innodb数据。改天研究研究。 [url]http://code.google.com/p/innodb-tools/[/url] InnoDB Tools是一个开源的项目,提供了MySQL InnoDB的数据恢复工具,该项目的作者是专业的MySQL咨询师。 MySQL数据库现...

一个人的安静 871

诠视MR眼镜Unity开发设置_Unity2020.3.38

请按照如下设置Android SDK 和 Gradle。打包前先将Unity切换到Android模式。Preferences 设置。

m0_71932574的博客 603

MySQL:如何快速的查看Innodb数据文件

导读:作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列文的作者本文版本MySQL 5.7.22,水平有限如果有误,请谅解想阅读八怪源码文章欢迎订阅本文建议...

老叶茶馆 1236

Maven的下载安装配置教程(详细图文)

目录 一、简单了解一下什么是Maven 二、maven的下载 三、maven的安装 四、maven的环境变量配置 五、setting文件配置 六、开发工具配置Maven 一、简单了解一下什么是Maven Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。 1.Maven翻译为“专家“, ”内行”的意思,是著名Apache公司下基于Java开发的开源项目。 2.Maven项目对象模型(POM)是一..

bakelFF的博客 12万+

外骨骼机器人(五):步态分析之正常步态

研究病理步态之前,需要了解正常步态,作为判断标准。但是需要记住两个问题:1.“正常”因人而异,性别、年龄、身体情况都需要考虑在内,因此,需要对不同的个体选择合适的正常标准;2.即使病人的步态与正常步态有某种不同,这也不能说明这是不可取的,也不能说明应该把它变成“正常”步态。许多步态异常是对病人的一些问题的一种补偿,尽管异常,但它们仍然是有用的。步态周期的定义是连续为两次发生重复行走事件之间的时间间隔。尽管可以选择任何事件来定义步态周期,但通常使用一只脚接触地面的瞬间(“初始接触”)是方便的。

行者无疆的博客 1999

mysql查看数据文件ibdata,mysql innodb ibdata 数据文件误删除恢复过程

1.首先绝对不要关闭mysql 进程!!!pidof mysql2.确认误删除的文件是否存在ls -trl /proc/PID/fd3.禁止数据库写操作,防止数据恢复时不一致flush tables with read lock;4.写出内存脏页到磁盘,防止数据恢复时不一致set global innodb_max_dirty_pages_pct=0;5. 查看binlog 日志写入情况,确保fi...

weixin_39842744的博客 148

广东省低应变题库

11.按《建筑地基基础检测规范》DBJ/T15-60-2019的规定,采用低应变法对混凝土预制桩进行检测时,地基基础设计等级为甲级的桩基工程抽检桩数不应少于总桩数的30%,其余桩基工程抽检桩数不应少于总桩数的20%,且不得少于10根;16.按《建筑地基基础检测规范》DBJ/T15-60-2019的规定,当对某桩的桩身完整性判定为III类时,可认为该桩不满足验收条件,不用进一步确定该桩桩身缺陷对桩身结构承载力的影响程度。2.地基基础检测所用计量器具均应在检定(校准、验证)的有效期内,性能符合相关技术要求。

ZShy001238的博客 321

mysql if innodb_Mysql 5.7.20 mysql innodb 系统表损坏带来的问题

早上上班后,mysql服务器遇到点小问题,在排查故障过程查看mysql错误日志过程中发现有几个innodb 表无法打开,使用desc查看有关表的表结构提示表不存在,show tables 可以查到一下五个表,以下是具体的报错信息:2018-01-12 09:17:41 17235 [Warning] InnoDB: Cannot open table mysql/innodb_index_stat...

weixin_39523835的博客 204

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

查看和修改mysql存储引擎sql,对比InnoDB和Myisam

这边我们使用的是navicat连接mysql数据库来操作 mysql的存储引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等 数据库重启后会恢复,永久修改需要你去修改: 7.修改已有表的存储引擎 InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。 最常使用的2种存储引擎:

qq_37432174的博客 986

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

InnoDB Configuration-startup

目录 在MySQL配置文件中指定选项 查看InnoDB初始化信息 重要的存储注意事项 系统表空间数据文件配置 重做日志文件配置 Undo Tablespace Configuration Temporary Tablespace Configuration Page Size Configuration Memory Configuration 关于InnoDB配置的第一个决...

wangchaofan1992的博客 344

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

17.8.1 InnoDB 启动配置

关于 InnoDB 配置的第一个决定涉及数据文件、日志文件、页面大小和内存缓冲区的配置,这些应该在初始化 InnoDB 之前配置。在初始化 InnoDB 之后修改配置可能需要一些复杂的步骤。本节提供有关在配置文件中指定 InnoDB 设置、查看 InnoDB 初始化信息和重要存储注意事项的信息。

影三人 1386

MYSQL-innodb存储引擎配置

1、查看当前默认的innodb引擎路径: mysql> show variables like '%innodb_data_file_path%'; +-----------------------+------------------------+ | Variable_name | Value | +-------...

weixin_34060299的博客 209

mysql存储公告_mysql - 存储引擎

这篇文章将会总结mysql中Innodb存储引擎与Myisam存储引擎的基本知识点。存储引擎分类:mysql中,存储引擎是插件式的,同一个数据库中的不同的表可以使用不同的存储引擎,所以,存储引擎是表级别的概念,存储引擎也被称为"表类型",每张表可以使用不同的存储引擎类型。全部分类:CSV:将CSV文件(以逗号分隔字段的文本文件)作为MySQL表文件。MRG_MYISAM:此引擎也被称为MERGE存...

weixin_42268494的博客 325

14.6.1 InnoDB Startup Configuration 启动配置

14.6.1 InnoDB Startup Configuration 启动配置 首先描述关于InnoDB 配置设计数据库文件,日志文件,page size 和内存buffer 的配置。 推荐你定义数据文件,日志文件和page size 配置在创建InnoDB之前,修改数据文件或者log file 配置在InnoDB 实力被创建后可能 涉及重大的过程,page size

zhaoyangjian724的专栏 1118

【mysql】InnoDB: Header page consists of zero bytes in datafile: ./jobslink_job/xxl_job_log.ibd,

InnoDB:数据文件'/jobslink_job/xsl_job_log.ibd'已损坏。无法阻止从前64页中挖掘空间ID。

一个写了10年bug的程序员日常笔记。 906

mysql数据文件还原

1.备份mysql数据库文件 目录:/var/lib/mysql 数据文件:ibdata1 结构文件:confluence 2.注意事项 1.查看数据库文件chown权限 2.设置数据库引擎InnoDB [mysqld] #lower_case_table_names=1 datadir=/var/lib/mysql socket=/var/lib/mys...

何超杰的博客 6870

mysql 无法更改innodb_mysql innodb 问题

关键字:mysql无法启动服务,mysql卡死,InnoDB' registration as a STORAGE ENGINE failed.Unknown/unsupported table type: innodb.前几天,启动mysql时,突然报1067系统错误,死活无法启动。当时不管三七二十八,重装,清空注册表,重启,任然没办法启动。总是在安装后的配置那里最后一步启动服务的界面卡死,半天...

weixin_36006790的博客 524

Mysql学习_InnoDB On-Disk Structures_TABLE

InnoDB On-Disk Structures Table Creating InnoDB Tables: CREATE TABLE t1 (a INT, b CHAR (20), PRIMARY KEY (a)) ENGINE=InnoDB; You do not need to specify the ENGINE=InnoDB clause if InnoDB is defined ...

jzzw的博客 678

mysql maria引擎_mysql

这篇文章将会总结mysql中Innodb存储引擎与Myisam存储引擎的基本知识点。在本博客中,"mysql"是一个系列文章,这些文章主要对mysql/mariadb的常用知识点进行了总结,每一篇博客总结的知识点有所不同,具体内容可参考mysql文章列表。mysql文章列表直达链接:mysql知识点总结mysql中,存储引擎是插件式的,同一个数据库中的不同的表可以使用不同的存储引擎,所以,存储引擎...

weixin_39980347的博客 114
上一篇: Linux 性能分析工具
下一篇: 配置中心 nacos集群
取壳羊
博客等级 码龄15年 5粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值