mysql8 根据ibd文件恢复表
原文
https://github.com/ddcw/ibd2sql
环境:mysql 8.0.33
一、创建测试数据
Mysql8.0.32环境: mysql> create table t1(id int ,name varchar(200)); Query OK, 0 rows affected (0.02 sec) mysql> insert into t1 select 1,'a'; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> insert into t1 select 1,'a'; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> insert into t1 select 1,'a'; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE TOTAL_ROW_VERSIONS > 0; Empty set (0.00 sec) mysql> alter table t1 add age int; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> update t1 set age=10; Query OK, 3 rows affected (0.01 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql> SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE TOTAL_ROW_VERSIONS > 0; +--------+ | NAME | +--------+ | czg/t1 | +--------+ 1 row in set (0.01 sec)
二、安装工具
root@db-0:~# wget https://github.com/ddcw/ibd2sql/archive/refs/tags/v1.2.tar.gz root@db-0:~# tar xvf v1.2.tar.gz ibd2sql-1.2/ ibd2sql-1.2/LICENSE ibd2sql-1.2/README.md ibd2sql-1.2/README_OLD.md ibd2sql-1.2/getsql.py ibd2sql-1.2/ibd2sql/ ibd2sql-1.2/ibd2sql/COLLATIONS.py ibd2sql-1.2/ibd2sql/__init__.py ibd2sql-1.2/ibd2sql/ibd2sql.py ibd2sql-1.2/ibd2sql/innodb_page.py ibd2sql-1.2/ibd2sql/innodb_page_expage.py ibd2sql-1.2/ibd2sql/innodb_page_ibuf.py ibd2sql-1.2/ibd2sql/innodb_page_index.py ibd2sql-1.2/ibd2sql/innodb_page_inode.py ibd2sql-1.2/ibd2sql/innodb_page_sdi.py ibd2sql-1.2/ibd2sql/innodb_page_spaceORxdes.py ibd2sql-1.2/ibd2sql/innodb_type.py ibd2sql-1.2/ibd2sql/mysql_json.py ibd2sql-1.2/ibd2sql/page_type.py ibd2sql-1.2/main.py root@db-0:~# cd ibd2sql-1.2/ root@db-0:~/ibd2sql-1.2# ll total 100 drwxrwxr-x 3 root root 4096 Apr 25 17:09 ./ drwx------ 37 root root 4096 May 8 13:42 ../ -rw-rw-r-- 1 root root 35149 Apr 25 17:09 LICENSE -rw-rw-r-- 1 root root 8696 Apr 25 17:09 README.md -rw-rw-r-- 1 root root 19259 Apr 25 17:09 README_OLD.md -rw-rw-r-- 1 root root 11457 Apr 25 17:09 getsql.py drwxrwxr-x 2 root root 4096 Apr 25 17:09 ibd2sql/ -rw-rw-r-- 1 root root 6313 Apr 25 17:09 main.py root@db-0:~/ibd2sql-1.2# python3 main.py -h usage: main.py [--help] [--version] [--ddl] [--sql] [--delete] [--complete-insert] [--force] [--set] [--multi-value] [--replace] [--table TABLE_NAME] [--schema SCHEMA_NAME] [--sdi-table SDI_TABLE] [--where-trx WHERE_TRX] [--where-rollptr WHERE_ROLLPTR] [--limit LIMIT] [--debug] [--debug-file DEBUG_FILE] [--page-min PAGE_MIN] [--page-max PAGE_MAX] [--page-start PAGE_START] [--page-count PAGE_COUNT] [--page-skip PAGE_SKIP] [FILENAME] 解析mysql8.0的ibd文件 https://github.com/ddcw/ibd2sql positional arguments: FILENAME ibd filename optional arguments: --help, -h show help --version, -v, -V show version --ddl, -d print ddl --sql print data by sql --delete print data only for flag of deleted --complete-insert use complete insert statements for sql --force, -f force pasrser file when Error Page --set set/enum to fill in actual data instead of strings --multi-value single sql if data belong to one page --replace "REPLACE INTO" replace to "INSERT INTO" (default) --table TABLE_NAME replace table name except ddl --schema SCHEMA_NAME replace table name except ddl --sdi-table SDI_TABLE read SDI PAGE from this file(ibd)(partition table) --where-trx WHERE_TRX default (0,281474976710656) --where-rollptr WHERE_ROLLPTR default (0,72057594037927936) --limit LIMIT limit rows --debug, -D will DEBUG (it's too big) --debug-file DEBUG_FILE default sys.stdout if DEBUG --page-min PAGE_MIN if PAGE NO less than it, will break --page-max PAGE_MAX if PAGE NO great than it, will break --page-start PAGE_START INDEX PAGE START NO --page-count PAGE_COUNT page count NO --page-skip PAGE_SKIP skip some pages when start parse index page Example: ibd2sql /data/db1/xxx.ibd --ddl --sql ibd2sql /data/db1/xxx.ibd --delete --sql ibd2sql /data/db1/xxx#p#p1.ibd --sdi-table /data/db1/xxx#p#p0.ibd --delete --sql
三、恢复数据
root@db-0:~/ibd2sql-1.2# python3 main.py /usr/local/mysql8/data/ceshi/t1.ibd --ddl --sql --complete CREATE TABLE IF NOT EXISTS `ceshi`.`t1`( `id` int NULL, `name` varchar(200) NULL, `age` int NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ; INSERT INTO `ceshi`.`t1`(`id`,`name`,`age`) VALUES (1, 'a', NULL); INSERT INTO `ceshi`.`t1`(`id`,`name`,`age`) VALUES (1, 'a', NULL); INSERT INTO `ceshi`.`t1`(`id`,`name`,`age`) VALUES (1, 'a', NULL); root@db-0:~/ibd2sql-1.2#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-05-08 kafka环境搭建
2021-05-08 linux时间不准