携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情
py_innodb_page_info分析ibd文件信息
py_innodb_page_info工具是《MySQL技术内幕 InnoDB存储引擎》作者用来分析Mysql表空间的各页的类型和数据,此工具采用python编写,github地址如下
通过README.md文件我们可以知道安装此工具前需要先安装python环境,步骤如下
初始准备
### 将项目从git上面下载到本地并且上传到文件夹中,并且解压
unzip py_innodb_page_info-master.zip
### 修改文件夹名字为py_innodb_page_info,可以不改,本文已经修改
mv py_innodb_page_info-master py_innodb_page_info
### 进入py_innodb_page_info文件夹创建ibds文件夹
mkdir ibds
### 准备ibd文件放入ibds文件夹中,测试所用文件为student.ibd
安装Python环境
#### 一定一定注意,需要安装python2的环境而不是python3的环境,因为这个工具基于python2开发,在语法上
### 和python3有不兼容的地方,后面执行脚本可能报错,如下
# Traceback (most recent call last):
# File "py_innodb_page_info.py", line 3, in <module>
# import mylib
# File "/usr/local/py_innodb_page_info/mylib.py", line 19
# print 'Usage: python py_innodb_page_info.py [OPTIONS] tablespace_file'
# SyntaxError: Missing parentheses in call to 'print'. Did you mean print('Usage: python py_innodb_page_info.py [OPTIONS] tablespace_file')
### 所以这里一定要选python2,有的系统安装了apt就可以用apt,本文测试采用apt-get
apt-get install python2
### 安装完环境可以验证下
python2 -v
验证
#### 验证环境是否安装正确
[root@test py_innodb_page_info]# python2 py_innodb_page_info.py ibds/student.ibd
Total number of page: 6:
Freshly Allocated Page: 2
Insert Buffer Bitmap: 1
File Space Header: 1
B-tree Node: 1
File Segment inode: 1
分析ibd文件具体表结构,案例中是student.idb文件
### 查看student.idb表的具体表空间
[root@test py_innodb_page_info]# python2 py_innodb_page_info.py ibds/student.ibd -v
page offset 00000000, page type <File Space Header>
page offset 00000001, page type <Insert Buffer Bitmap>
page offset 00000002, page type <File Segment inode>
page offset 00000003, page type <B-tree Node>, page level <0000>
page offset 00000000, page type <Freshly Allocated Page>
page offset 00000000, page type <Freshly Allocated Page>
Total number of page: 6:
Freshly Allocated Page: 2
Insert Buffer Bitmap: 1
File Space Header: 1
B-tree Node: 1
File Segment inode: 1
ibd文件位置
文件中的student.ibd文件就是来源于Mysql中的表结构,文件路径位于默认配置文件my.cnf配置的datadir路径
例如在mysql中存在一个test数据库,里面包含一个student表
### 切换到test数据库
mysql> use test;
### 查询test数据库的所有表格
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| grade |
| student |
| tb_student |
| tb_student2 |
| test |
| test1 |
+----------------+
在datadir配置的路径下展示如下
进入数据库名字的文件夹后,就能看到数据库表相关文件