小编寄语

想必大家都知道,Oracle ACE李真旭(Roger)是国内最专业的Oracle 数据库恢复专家。但知识都是触类旁通,真正的专家,从来不会局限在一个方向上。今天分享的内容,是他在MySQL数据恢复上所做的尝试。

本文主要分享在没有备份的情况下,MySQL数据库如何恢复被删除的表。

包含两个主要的场景:

1、drop table后的恢复

2、truncate table后的恢复

正文:

我们都知道,MySQL Server都很多存储引擎,并不是每种都可以进行异常情况之下都恢复,比如drop table/tuncate table/delete table/update table /drop database又或者是ibdata文件损坏之类的。用的最多的就是Myisam和innodb存储引擎。目前基本上都是5.5+版本了,我想几乎没有人再去使用Myisam了吧。我这里所测试都5.6,5.7版本中默认都存储引擎已经是Innodb了。因此这里我以Innodb引擎为例子进行说明。

MySQL drop table

这里我们首先来测试innodb_file_per_table为off的情况,即表结构和数据存在同一个文件中。这里我分别测试了表存在主键和不存在主键的情况,供参考。

innodb_file_per_table参数为off(有主键的情况)

1创建测试表

2备份表结构

[root@killdb ~]

# mysqldump –opt -d -uroot -proger recover test_drop0801 > /tmp/innodb_recovery/recover/test_drop0801.sql

3删除表

mysql> drop table test_drop0801;

Query OK, 0 rows affected (0.00 sec)

4扫描数据文件

5创建用于恢复的数据字典

6查询需要恢复表的信息

7确认数据page中数据是否存在

8抽取page中的数据

9加载数据到数据库

我们可以看到,顺利完成了drop table的恢复,而且数据完好无损。实际上我这里还同时测试了无主键的情况,经过测试都类似,可以进行完美的恢复。这里不再累述。

MySQL truncate table

首先这里我要利用undrop_for_innodb 这个开源工具包(当然需要编译),目前该工具已经在2017年1月宣布闭源了,而且开始收费。但是我们仍然开源使用之前都开源工具包。另外这里可以告诉大家,不久的将来,odu 也会支持MySQL.

如下是我的truncate table 测试过程:

1创建测试表

2备份表结构

[root@killdb

innodb_recovery]

# mysqldump –opt -d -uroot -proger recover t_enmotech > /tmp/innodb_recovery/recover/t_enmotech.sql

[root@killdb innodb_recovery]

#

3truncate table

mysql> truncate table t_enmotech;

Query OK, 0 rows affected (0.00 sec)

4获取数据字典

5扫描逻辑卷

6创建数据字典表

该工具包提供的recover_dictionary脚本会创建一个test数据库,并创建一些数据字典表供恢复查询使用。同时也会在当前目录创建dictionary目录,该目录下会存放数据字典信息。

7查询需要恢复的表的index_id信息

可以看到被truncate的表的index_id 为178,我们应该进一步从178 的page中获取数据。

8确认数据是否存在

9抽取page中的数据

抽取数据之前,必须提前准备好表的表结构,由于这里是truncate,因此表结构是存在的,很容易获取。我这里是测试,所以之前就备份了结构。

那么如果是drop table 呢? 实际上我们也可以通过该工具来恢复表结构。

10加载数据到mysql server

11验证数据

我们可以看到,被truncate 掉的数据被成功恢复了回来。

这里我测试的truncate table的场景,其实对于drop table、delete table 恢复方法均类似(已测试过)。另外,对于更为严重的drop database 其实也是可以进行恢复的。

当然,对于实际的生产库来讲,数据不一定能够恢复,因为有可能被覆盖而导致数据恢复不全。MySQL 对于空间的重用机制与Oracle 有很大区别,对于Oracle 而言,如果是delete的数据,还是很难被覆盖掉的,对于drop 和truncate 则领导别论。然而MySQL则有所不同,MySQL 默认会启动一些purge 进程来进行空间重用,这是MySQL 5.6的情况:

在MySQL 5.7 版本中更为坑爹,MySQL 默认会启动4个purge 线程,因此很容易就会导致空间被重用,最终导致数据无法恢复,如下是MySQL 5.7的purge相关参数:

因此,一旦你遭遇turncate table/drop table/delete /drop database等情况,建议立刻停止服务或者停止数据库,保留现场,以防止环境进一步恶化,最终导致数据无法恢复的情况出现。

客服微信:(id1234562011)本文链接:https://www.changchenghao.cn/n/72188.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 394062665@qq.com 举报,一经查实,本站将立刻删除。

如何找回mysql删除的表_mysql误删表如何恢复,恢复被删除表的步骤说明相关推荐

  1. mysql 删除root用户_mysql误删root用户解决办法

    MySQL删除root用户后恢复 MySQL数据库中有一个超级特权用户,那就是root.root用户有至高无上的权限,它可以创建数据库,创建用户,赋予用户权限,对所以数据库拥有所有的操作权限.一旦这个 ...

  2. mysql不能创建innodb类型表_MYSQL have_innodb DISABLED无法创建innodb类型的表

    今天在一台MYSQL服务器上发现,明明用了engine=innodb创建的表,结果创建出来却成了myisam的表.再看show variables like '%innodb%'; have_inno ...

  3. mysql修改索引语句_mysql——创建索引、修改索引、删除索引的命令语句

    查看表中已经存在 index:show index from table_name; 创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER ...

  4. 找回mysql登陆密码怎么办_MySQL忘记密码怎么办 如何找回密码

    作者选择100电脑网推荐配置 了解最佳配置看首页 如果运行MySQL,mysqld首先杀掉: killall -TERM mysqld. 启动MySQL:bin / safe_mysqld跳过-gra ...

  5. mysql分布式数据库架构_MySQL分布式数据库架构:分库、分表、排序、分页、分组、实现教程...

    MySQL分库分表总结: 单库单表 : 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 : 随着用户数量的增加, ...

  6. 升级mysql服务器二进制备份_MySQL二进制日志备份和恢复详解

    基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句. 作用: 1.二进制日志的主要目的是在恢复使能够最大可能地更新数据库,因为二 ...

  7. qldump 备份所有表_MySQL中的备份和恢复是怎样执行的?

    - 点击上方"中国统计网"订阅我吧!-MySQL备份 MySQL中的逻辑备份是将数据库中的数据备份为一个文本文件,备份的文件可以被查看和编辑.在MySQL中,使用mysaldump ...

  8. mysql二进制日志重置_MySQL二进制日志备份和恢复详解

    原文链接:http://www.showerlee.com/archives/681 ****经实践,该教程ok,特在此分享**** 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了 ...

  9. mysql异机还原_MySQL innobackupex全量备份恢复

    转自 http://blog.itpub.net/27099995/viewspace-1295099/ 先简单介绍一下这个工具:innobackupex innobackupex比xtarbacku ...

  10. mysql 从 a表updateb表_mysql A表自动更新和插入B表的数据

    展开全部 1.关于这种自动更新,添加32313133353236313431303231363533e78988e69d8331333339666639,删除的功能可以使用触发器来现实: 2.触发器语 ...

最新文章

  1. 计算机组成原理中的“上溢”和“下溢”分别的定义是什么?
  2. java Servlet Filter 拦截Ajax请求,统一处理session超时的问题
  3. 内温的整体优先效应实验_实验室通风与系统控制
  4. Java基础-反射机制
  5. java中md5加密和解密_如何在java中实现md5加密和解密
  6. java 导出密钥_java-如何从密钥库中导出.key和.crt
  7. 【14年浙江省赛 F ZOJ 3781】Paint the Grid Reloaded 【建图、bfs】
  8. 时域技术在天线测量中的应用
  9. 支部谈心谈话工作怎么开展?_工作场所“激情”的谈话引发了读书俱乐部期间的热烈聊天
  10. android如何增加北斗定位,安卓手机怎么设置北斗导航图文教程
  11. Bluetooth tethering不能用问题
  12. 利用Windows的IFELanguage接口,取得拼音笔划数其实很简单!
  13. 2020iPS细胞研究进展综述
  14. video标签设计vue视频播放器组件
  15. c++: Logger日志信息
  16. 互联网大佬谁编程第一,周鸿祎算第三
  17. JavaScript前台判空
  18. 16.JavaScript学习笔记——命名空间
  19. Unity Camera 动态摄像机大小
  20. ISO软件工程模板-概要设计说明书

热门文章

  1. SEO学习笔记一:Google搜索引擎背后的运作模式
  2. 杭州电子科技大学计算机研究生很好考吗,杭州电子科技大学考研难吗?一般要什么水平才可以进入?...
  3. LeetCode 198. 打家劫舍
  4. Unity 一种更为简洁明了的环绕相机方案
  5. 数独大师级技巧_数独高级解法技巧,数独高手教你如何玩转数独
  6. php绘制的图像是什么格式,图片一般是什么格式
  7. 如何制作MacOS安装U盘
  8. C++ builder 遍历所有组件的 caption 属性,轻松实现界面多语言支持
  9. excel 嵌套html,excel 多层if嵌套怎么优化
  10. c语言里的pow函数(好理解,易懂)