返回顶部
首页 > 资讯 > 数据库 >MySQL中如何使用undrop来恢复drop的表
  • 518
分享到

MySQL中如何使用undrop来恢复drop的表

2024-04-02 19:04:59 518人浏览 安东尼
摘要

小编给大家分享一下Mysql中如何使用undrop来恢复drop的表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

小编给大家分享一下Mysql中如何使用undrop来恢复drop的表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

mysql中可以使用编程语言(比如python)来解析binlog中DML的逆操作来达到闪回的效果,如果数据不多,手工解析也可以。这也是现在大家碰到的很多DML Flashback的一个基本原理。而如果是DDL,比如DROP,那就得叹声气了。

GitHub上有一个很不错的项目是undrop,基于InnoDB,也就意味着如果你所在的环境有了drop操作还是存在恢复的可能了,当然这个过程需要谨慎,建议大家在测试环境先练习测试论证后再做决定,当然我们希望这个工具永远不要排上用场。

这个项目貌似现在关注的人还不太多,最近看阿里的内核月报中也做了解读。Http://mysql.taobao.org/monthly/2017/11/01/,所以引起了我的注意,带着好奇心,自己也测试一把。

MySQL中如何使用undrop来恢复drop的表

安装部署很简单。

gitclone https://github.com/twindb/undrop-for-innodb.git

make

这里需要注意的是,你的环境很可能没有flex包,可以在make之前安装一下。

yum install flex

然后我们来尝试编译一个文件sys_parser.c,先配置basedir

basedir=/usr/local/mysql_5.7

GCc `$basedir/bin/mysql_config --cflags` `$basedir/bin/mysql_config --libs` -o sys_parser sys_parser.c

这个工具的一个基本原理就是解析ibdata,从里面解析出我们需要的页的信息,即对应的数据字典。

mysql> show tables like '%SYS%';

+--------------------------------------+

| Tables_in_infORMation_schema (%SYS%) |

+--------------------------------------+

| INNODB_SYS_DATAFILES |

| INNODB_SYS_VIRTUAL |

| INNODB_SYS_INDEXES |

| INNODB_SYS_TABLES |

| INNODB_SYS_FIELDS |

| INNODB_SYS_TABLESPACES |

| INNODB_SYS_FOREIGN_COLS |

| INNODB_SYS_COLUMNS |

| INNODB_SYS_FOREIGN |

| INNODB_SYS_TABLESTATS |

+--------------------------------------+

10 rows in set (0.00 sec)

其中这4个数据字典是需要重点关注的。

SYS_COLUMNS| SYS_FIELDS | SYS_INDEXES | SYS_TABLES

这个工具功能蛮丰富,在目录下有个sakila的文件夹,是一些示例的脚本,我们可以创建一些看起来和业务相关的表,不过实际上我们可以做个减法,只创建一个我们需要重点关注的表,然后导入数据即可。

-rw-r--r--. 1 jeanron jeanron 3231472 Dec 16 2011 sakila-data.sql

-rw-r--r--. 1 jeanron jeanron 50019 Dec 16 2011 sakila.mwb

-rw-r--r--. 1 jeanron jeanron 23099 Dec 16 2011 sakila-schema.sql

否则,这一套表结构还算是比较复杂的,存在外键关联,处理起来需要花些额外的时间。

整个初始化的工作,我们以表actor为例,手工摘取出actor的建表语句,然后运行sakila-data.sql脚本即可。

mysql> checksum table actor;

+--------------+------------+

| Table | Checksum |

+--------------+------------+

| sakila.actor | 1702520518 |

+--------------+------------+

1 row in set (0.00 sec)

查询一下表actor的数据量。

mysql> select count(*)from actor;

+----------+

| count(*) |

+----------+

| 200 |

+----------+

1 row in set (0.00 sec)

要解析ibdata,可以使用stream_parser来做。我们指定ibdata的路径。

# ./stream_parser -f /U01/mysql_5.7_test/n1/ibdata1

Opening file: /U01/mysql_5.7_test/n1/ibdata1

File information:

ID of device containing file: 64512

inode number: 152382

protection: 100640 (regular file)

number of hard links: 1

user ID of owner: 501

group ID of owner: 501

device ID (if special file): 0

blocksize for filesystem I/O: 4096

number of blocks allocated: 155648

time of last access: 1509475823 Wed Nov 1 02:50:23 2017

time of last modification: 1509476206 Wed Nov 1 02:56:46 2017

time of last status change: 1509476206 Wed Nov 1 02:56:46 2017

total size, in bytes: 79691776 (76.000 MiB)

Size to process: 79691776 (76.000 MiB)

All workers finished in 1 sec

整个操作很快,会在当前目录下生成一个pages-ibdata1的文件夹,下面包含两个文件夹。

drwxr-xr-x. 2 root root 4096 Nov 1 02:57 FIL_PAGE_INDEX

drwxr-xr-x. 2 root root 4096 Nov 1 02:57 FIL_PAGE_TYPE_BLOB

比如INDEX目录下,存在大量的页,比如下面的输出。

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000001.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000002.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000003.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000004.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000005.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000011.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000012.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000013.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000014.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000015.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000016.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000017.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000032.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000033.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 18446744069414584320.page

要解析里面的内容,我们可以使用另外一个命令c_parser,根据关键字sakila/actor来过滤。

./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000001.page -t dictionary/SYS_TABLES.sql | grep 'sakila/actor'

其中参数4DF,代表文件格式(4代表文件格式是 REDUNDANT),D(D 表示只恢复被删除的记录),f生成文件

然后依次使用c_parser来解析页得到其他几个数据字典的信息,比如(SYS_INDEXES,SYS_COLUMNS,SYS_FIELDS)

以上是“MySQL中如何使用undrop来恢复drop的表”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中如何使用undrop来恢复drop的表

本文链接: https://lsjlt.com/news/62734.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL中如何使用undrop来恢复drop的表
    小编给大家分享一下MySQL中如何使用undrop来恢复drop的表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • RMAN如何恢复drop purge的表
    这篇文章主要介绍RMAN如何恢复drop purge的表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!@ORA12C>  alter s...
    99+
    2024-04-02
  • mysql 中怎么恢复drop表数据
    mysql 中怎么恢复drop表数据,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。   数 据 类 型 MYSQL 数据库...
    99+
    2024-04-02
  • Oracle Drop表如何进行purge恢复ODU
    这篇文章给大家介绍Oracle Drop表如何进行purge恢复ODU,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Oracle Drop表(purge)恢复(ODU)通过O...
    99+
    2024-04-02
  • 如何使用RMAN备份将Non-CDB中被drop的表恢复到新用户方案与新表空间中
    这篇文章主要介绍如何使用RMAN备份将Non-CDB中被drop的表恢复到新用户方案与新表空间中,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!RMAN使用recover命令...
    99+
    2024-04-02
  • mysql删除表如何恢复
    要恢复被删除的MySQL表,有几种方法可以尝试: 使用备份:如果您在删除表之前对数据库进行了备份,那么您可以从备份中恢复被删除的...
    99+
    2024-04-12
    mysql
  • MySQL中DROP USER语句如何使用
    小编给大家分享一下MySQL中DROP USER语句如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL中的DROP...
    99+
    2024-04-02
  • mysql删除表后如何恢复
    如果您在MySQL数据库中意外删除了表,您有几种方法可以尝试恢复: 使用备份:如果您有数据库的备份,您可以将备份文件恢复到一个新...
    99+
    2024-04-09
    mysql
  • mysql删除表数据如何恢复
    目录实验模拟恢复实战常用参数选项解释不常用选项 实验模拟 该实验必须是mysql开启了binlog的情况。 binlog日志,即binary log,是二进制日志文件。它有两个作用, 一是增量备份,即只备份新增...
    99+
    2024-04-02
  • 如何通过物理方式使MySQL恢复单表
    本篇内容主要讲解“如何通过物理方式使MySQL恢复单表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何通过物理方式使MySQL恢复单表”吧! ...
    99+
    2023-02-09
    mysql
  • 如何实现MySQL中表的备份和恢复的语句?
    如何实现MySQL中表的备份和恢复的语句? -- 附具体代码示例引言:在开发中,我们经常需要对MySQL中的表进行备份和恢复,以保证数据的安全性和可靠性。本文将介绍如何利用MySQL的语句来实现表的备份和恢复,并提供具体的代码示例供参考。一...
    99+
    2023-11-08
    - 数据库备份 备份: - mysqldump - 数据库导出 恢复:
  • 如何使用innobackupex恢复mysql数据库
    本篇内容主要讲解“如何使用innobackupex恢复mysql数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用innobackupex恢复mysq...
    99+
    2024-04-02
  • Mysql如何恢复slave上某几张表
    这篇文章给大家分享的是有关Mysql如何恢复slave上某几张表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 主库一直模拟插入数据[root@no...
    99+
    2024-04-02
  • 如何恢复navicat删除的表
    这篇文章给大家分享的是有关如何恢复navicat删除的表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysql数据库如果因为某些原因导致数据损坏或丢失,如果有备份我们可以把之前...
    99+
    2024-04-02
  • oracle如何恢复删除的表
    在Oracle数据库中,可以使用以下方法来恢复被删除的表:1. 使用回滚段恢复:如果表被删除后,数据库未提交事务或者事务回滚未完成,...
    99+
    2023-08-23
    oracle
  • MySQL如何使用使用Xtrabackup进行备份和恢复
    目录1 备份1.1 全备1.2 增备2 备份恢复2.1 准备数据2.2 进行恢复3 目录结构4 备份脚本4.1 脚本4.2 配置文件5 恢复脚本5.1 脚本5.2 配置文件1 备份 进行备份前需要先创建备份用户,直接...
    99+
    2022-05-27
    MySQL Xtrabackup MySQL 备份和恢复
  • jquery如何恢复原来的css样式
    这篇文章将为大家详细讲解有关jquery如何恢复原来的css样式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jquery是什么jquery是一个简洁而快速的JavaScript库,它具有独特的链式语法和...
    99+
    2023-06-15
  • 如何通过Oracle来辅助MySQL数据问题的恢复
    这篇文章将为大家详细讲解有关如何通过Oracle来辅助MySQL数据问题的恢复,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。今天琢磨一个问题,在平时的工作中如果碰到一些不...
    99+
    2024-04-02
  • MySQL使用物理方式快速恢复单表
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是mysql的国产分支版本,使用上与MySQL一致。 使用方法 1、首先创建一个测试表test1,并插入几条数据: mysql&...
    99+
    2022-12-14
    mysql恢复单表 mysql单表恢复
  • 如何在MySQL中使用JOIN来连接多个表格
    在MySQL中,您可以使用JOIN语句来连接多个表格。以下是一个简单的例子: 假设我们有两个表格,一个是用户表(users),另一个...
    99+
    2024-03-06
    MySQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作