ibd 文件
mySQL 的 InnoDB 引擎使用的数据表文件(每个表对应一个 ibd 文件,在 5.7 版本还有一个 frm 文件)。该文件按照 PAGE_SIZE(16KB)分为若干页,为了方便管理页又将多个页合并为区(extent),每个区固定 1MB。多个区又由专门的 PAGE(XDES) 来描述区信息。他们其中保存了一个数据表的数据和索引等所有相关信息。
读取 ibd 文件
开源社区提供了一个ibd2sql项目来读取 ibd 文件,他的核心就是将 ibd 文件输出为 sql 文件。
安装 ibd2sql
基本使用
他是一个 Python 脚本因此基本的使用方式就是:
其中可用的 options 包括:
--ddl
: 打印目标文件的DDL信息--sql
: 打印目标文件的数据, 并拼接为SQL语句--complete-insert
: 打印的SQL语句更完整, 即增加字段信息(某些数据库需要字段信息)--multi-value
: 对于生成的INSERT语句, 按照每页作为一个SQL语句. 即insert into table values(),(),()
--limit
: 仅打印 N 行数据。同 DML 中的limit--page-min
: 如果正在解析的页号小于这个值, 则跳过该页--page-max
: 如果正在解析的页号大于这个值, 则跳过--page-start
: 指定第一个数据页(叶子节点). 方便跳过坏块--page-count
: 解析的页数量,通常和--page-start
联合使用实现并发解析--page-skip
: 跳过的页数量
其中最简单的使用方式就是将所有的数据写入 sql 语句中:
Bash
# 直输出 insert 语句
python main.py xxx.ibd --sql > test.sql
# 输入 create table 以及 insert 语句
python main.py xxx.ibd --sql --ddl > test.sql
直接部署 MySQL 读取
ibd 文件实际上就是 InnoDB 的数据表文件,我们可以直接通过 Docker 部署然后还原他们。