首页 > 数据库 >mysql8 根据ibd文件恢复表

mysql8 根据ibd文件恢复表

时间:2024-05-08 14:11:08浏览次数:63  
标签:文件 1.2 mysql8 py ibd -- ibd2sql root page

原文

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#  

 

标签:文件,1.2,mysql8,py,ibd,--,ibd2sql,root,page
From: https://www.cnblogs.com/nanxiang/p/18179615

相关文章

  • 【攻防技术系列+Python】-- 将Python脚本转化为exe文件
    将Python脚本转化为exe文件到目前为止,我们已经介绍了一个远程控制程序所有常用功能的实现、但是实现的脚本在执行时需要Python环境和模块文件的支持,而目标设备上往往不具备这种条件。如果将使用Python编写的远程控制程序变成在Windows中可以执行的exe文件,就可以解决这个问题......
  • 在Gitlab Runner中调用Web Api写入Directory.Build.props需要的版本号文件
    摘要本文介绍了在Windows上的GitlabRunner,如何调用webapi更新版本号定义文件。PowerShellfunctionUpdate-Version{ param( [string]$WEB_API_URL, [string]$NAMESPACE, [string]$VERSION_ID )echo"能生成或写入.props文件的webapi的网站地址:"$WEB_API_URLe......
  • labelme标注后的json文件去掉某个类别的标签并生成新的json文件
    以去掉secondary_particle标签为例点击查看代码importjsonimportos#去除标注图像中的一次颗粒标签defremove_specific_labels(json_file):withopen(json_file,'r',encoding='utf-8',errors='ignore')asf:data=json.load(f)if"s......
  • Linux基础04-Linux中目录和文件都能操作的命令
    前面两节我们分别学习了目录操作命令和文件操作命令,那么有没有一些既可以操作目录,又可以操作文件的命令呢?这样我们就不需要记住两套命令了。其实还真有,今天这一章就带大家学习Linux中目录和文件都能操作的命令最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉......
  • Linux基础03-Linux文件操作命令
    其实啊,说起计算机操作,大部分情况下就是“增删改查”这四个大字儿,文件操作也是这么回事儿。就是改文件的时候得用点专门的编辑器,比如那个Vim。不过Vim这东西,真心不是一两句话就能给你讲清楚的,咱们在后续的章节再好好说道说道。现在学文件操作命令的时候,如果得改文件内容,咱们就先......
  • 文件IO的学习
    IO编程概述了解FAT32和NTFS文件系统是操作系统用于明确磁盘或者分区上文件的方法和数据结构。一块硬盘就像一个块空地,文件就像不同的材料,我们首先得在空地上建起仓库(分区),并且指定好(格式化)仓库对材料的管理规范(文件系统),这样才能将材料运进仓库保管。文件系统是对应硬盘的分......
  • FAT32和NTFS两种文件类型的特点
    FAT32和NTFS两种文件类型的特点。FAT32和NTFS都是Windows操作系统中常用的文件类型,它们有以下特点:1.FAT32:FAT32是一种较早的文件系统类型,它支持较小的文件大小和较小的磁盘容量,最大文件大小为4GB,最大磁盘容量为2TB。FAT32文件系统不支持文件权限、加密、压缩等高级功能,但它的......
  • 如何批量重命名,把文件(夹)名的内容位置调整(前后移动)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z情况是这样,把“中文[数字]”的名称,改为"中文-数字"打开工具,切换到文件批量复制模块,快捷键Ctrl+5找到右下角的“重命名”按钮,打开把那些文件拖入进去,也可以用右侧的导入按钮(如果是文件夹的话,要勾选“针对......
  • Linux文件系统-目录
    如果你最开始使用的是Windows电脑,你很可能会使用“文件夹folder”这个术语。但当你换到Linux时,你会发现文件夹通常被称为“目录directory”。事情是这样的。如果你愿意,你可以叫它文件夹,如果你喜欢,也可以叫它目录。这没有什么区别。但是,如果你想知道为什么文件夹在Linux中......
  • 快速找出存(不存在)在某个(或多个)文件的文件夹
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z想要找出有下面这个文件存在的文件夹切换到批量文件复制版块,快捷键Ctrl+5右侧,搜索添加选定范围,勾选搜索文件夹、包含子目录下面就把要存在文件(夹)的条件拖入进去,就会出现路径,再点击开始搜索等待工具提示搜......