mysql drop table 恢复_DROP TABLE 恢复

本文详细介绍了如何在没有备份的情况下,通过TwinDB恢复工具包从ibdata1文件恢复被DROP的InnoDB表数据。首先,演示了误删sakila库中actor表的过程,然后通过stream_parser和c_parser工具解析并提取数据,最后成功将数据导入到新的表中,实现了数据恢复。整个过程强调了恢复的步骤和注意事项,为MySQL数据库管理员提供了宝贵的救援指南。
摘要由CSDN通过智能技术生成

当DROP TABLE指令敲下的时候,你很爽,你有考虑过后果么?如果该表真的没用,你DROP到无所谓,如果还有用的,这时你肯定吓惨了吧,如果你有备份,那么恭喜你,逃过一劫,如果没有备份呢?这时就该绝望了?NO! 如果你的表是innodb表,那么还有希望挽救,如果是myisam表,那么真的没救了。前面文章介绍了 Recover InnoDB dictionary,这是恢复数据的前提。恢复innodb字典信息使用的是TwinDB recovery toolkit,我们恢复数据也是使用该工具。下面的案例是基于innodb_file_per_table=OFF的前提下,即使用共享表空间,所有的信息都保存在ibdata1中。使用独立表空间DROP TABLE后数据恢复将在后面的文章介绍。

错误的操作--删除表

用到的示例数据库还是sakila,关于下载地址前面的文章有地址。将模拟把sakila库中的actor表删除后进行恢复。

复制代码

root@localhost : sakila 21:34:11> SELECT * FROM actor LIMIT 10;+----------+------------+--------------+---------------------+

| actor_id | first_name | last_name | last_update |

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

| 1 | PENELOPE | GUINESS | 2006-02-15 04:34:33 |

| 2 | NICK | WAHLBERG | 2006-02-15 04:34:33 |

| 3 | ED | CHASE | 2006-02-15 04:34:33 |

| 4 | JENNIFER | DAVIS | 2006-02-15 04:34:33 |

| 5 | JOHNNY | LOLLOBRIGIDA | 2006-02-15 04:34:33 |

| 6 | BETTE | NICHOLSON | 2006-02-15 04:34:33 |

| 7 | GRACE | MOSTEL | 2006-02-15 04:34:33 |

| 8 | MATTHEW | JOHANSSON | 2006-02-15 04:34:33 |

| 9 | JOE | SWANK | 2006-02-15 04:34:33 |

| 10 | CHRISTIAN | GABLE | 2006-02-15 04:34:33 |

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

10 rows in set (0.01sec)

root@localhost : sakila 21:34:25>复制代码

复制代码

root@localhost : sakila 21:34:25> CHECKSUM TABLEactor;+--------------+------------+

| Table | Checksum |

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

| sakila.actor | 2472295518 |

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

1 row in set (0.07sec)

root@localhost : sakila 21:35:30> SET foreign_key_checks=OFF;

Query OK,0 rows affected (0.00sec)

root@localhost : sakila 21:35:46> DROP TABLEactor;

Query OK,0 rows affected (0.07sec)

root@localhost : sakila 21:35:57>复制代码

从ibdata1恢复数据

现在actor表已经删除,但表中的信息仍然存与ibdata1中。该数据保持不变,直到InnoDB的重用空闲的页。我们需要尽快停止mysqld进程。

对于恢复,我们将使用TwinDB恢复工具包。看看我前面的文章Recover InnoDB dictionary。

解析innodb表空间(ibdata1)

InnoDB将所有数据存储在B+树索引。 一个表有只有一个聚集索引,所有字段存储在这里。 如果表有辅助索引,由index_id标识每个索引。

如果我们要恢复一个表,我们必须找到属于特定index_id的所有页面。

stream_parser读取InnoDB表和排序按类型和每个index_id的InnoDB的页面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值