摘要:InnoDB 数据文件损坏,数据库无法启动,更悲催的是没有备份!难道要跑路?! 还好可以使用 Percona Data Recovery Tool for InnoDB 工具,从损坏的数据文件中提取数据进行恢复,那么该如何操作呢?
使用场景
InnoDB数据文件损坏,数据库无法启动,且无数据备份的情况下,进行数据恢复。
仅对MySQL InnoDB存储引擎数据文件有效。
所需资源
1.InnoDB 数据文件
2.可获取表结构的 mysql server
3.Percona Data Recovery Tool for InnoDB工具
操作说明
1. 使用 percona-data-recovery-tool-for-innodb 构建恢复工具。主要构建出2个工具,page_parser & constraints_parser。
2. 使用 page_parser 提取需要恢复的数据页,会在当前目录下生成 pages-$timestamp 数据文件目录
[root@mysql percona-data-recovery-tool-for-innodb]# page_parser -5 -f /path/to/ibdata1##命令使用方法[root@mysql percona-data-recovery-tool-for-innodb]# ./page_parser -hError: Usage: ./page_parser -4|-5[-dDhcCV]-f[-T N:M][-s size][-t size]Where -h -- Print thishelp-V -- Print debug information -d -- Process only those pageswhichpotentially could have deleted records(default=NO)-s size -- Amount of memory usedfordisk cache(allowed examples 1G 10M). Default 100M -T -- retrieves only pages with indexid=NM(N - high word, M - low word of id)-c -- count pagesinthe tablespace and group them by indexid-C -- count pagesinthe tablespace and group them by indexid(and ignore too high/zero indexes)-t size -- Size of InnoDB tablespace to scan. Use it onlyifthe parser can't determine it by himself.
3.生成相关表定义文件,并重新编译构建 constraints_parser 工具(需要连接数据库,有表结构即可)
[root@mysql percona-data-recovery-tool-for-innodb]# ./create_defs.pl --host=$db_host --user=$user --password=$pass --db=$database --table=$table > include/table_defs.h[root@mysql percona-data-recovery-tool-for-innodb]# make
4.从 pages-$timestamp 目录提取数据,可以导出到文件
[root@mysql percona-data-recovery-tool-for-innodb]# ./constraints_parser -5 -f pages-1493793157/FIL_PAGE_INDEX/0-22/0-00000003.page > datafileLOAD DATA INFILE'/root/percona-data-recovery-tool-for-innodb/dumps/default/test'REPLACE INTO TABLE`test`FIELDS TERMINATED BY'\t'OPTIONALLY ENCLOSED BY'"'LINES STARTING BY'test\t'(id, name);[root@mysql percona-data-recovery-tool-for-innodb]# cat datafiletest1"test"test2"test2"test3"test3"test4"test4"
5. 进行数据导入恢复