没有备份,数据误删,文件有部分损坏等情况下可以尝试分析ibd数据文件
说明:
ibd的page type 目前有31种,一般都是解析几种主要的类型
/** B-tree node */
constexpr page_type_t FIL_PAGE_INDEX = 17855
/** Undo log page */
constexpr page_type_t FIL_PAGE_UNDO_LOG = 2;
/** Index node */
constexpr page_type_t FIL_PAGE_INODE = 3;
/** Insert buffer free list */
constexpr page_type_t FIL_PAGE_IBUF_FREE_LIST = 4;
/** Extent descriptor page */
constexpr page_type_t FIL_PAGE_TYPE_XDES = 9;
页当中有2个伪列:infimum和Supremum,Page Directory页目录slot[1]指向infimum,infimum的record header种的next_record 指向实际的第1行记录,slot[n]指向Supremum列,解析当前页的数据,可以从 offset 99开始,依次按next_record查询下一条记录,直到next_record为负数,叠加后指向supremum.
安装
wget https://github.com/ddcw/ibd2sql/archive/refs/heads/main.zip
unzip main.zip
ibd2sql-main/
python3 main.py -h
解析DDL
python3 main.py /data/mysql/data/sakila/film_category.ibd --ddl
解析SQL
python3 main.py /data/mysql/data/sakila/film_category.ibd --sql
解析删除记录(delete标志,未analyze)
python3 main.py /data/mysql/data/sakila/film_category.ibd --delete
参考:
GitHub - ddcw/ibd2sql: 解析mysql中innodb数据文件(ibd),转换为sql. DDL和DML