首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL恢复delete的数据

前面介绍了MySQL数据库在使用InnoDB引擎时,如果误删了数据表,在共享表空间MySQL数据表InnoDB引擎表误删恢复(共享表空间ibdata1)和独立表空间MySQL数据表InnoDB引擎表误删恢复(独立表空间innodb_file_per_table=1)的情况下如何恢复数据、如果不幸误删了数据库MySQL数据库误删恢复。

如果没有完整的把数据库或者表删除掉,而仅仅是删除了表里的部分数据,比如本文探讨的:delete命令数据误删恢复,这种情况应该发生的概率更大,毕竟有机会删除库和表的权限和命令通常控制的都很严(删库跑路是段子)。

有人会有疑惑,用delete命令去删除数据,不都是正常想删除掉的么,为何存在要恢复的情况。说的很对,确实想要删除的自然不必再恢复,怕就怕手滑,没打算删除的也一并干掉了。这里我们探讨的就是这类被误删的数据该如何恢复。

后悔药数据恢复再次提醒:

1,首先需要说明的是,生产环境下慎重执行删除操作,除非你确实明白自己在做什么,否则不执行危险动作。

2,有条件的情况下,依靠系统来管理数据和数据库,尽可能降低潜在的管理的风险。

3,数据库有Update、Delete、Insert、Truncate、Drop类操作,先在测试环境执行一次,看结果和预期是否相符。生产环境执行前,先对要操作的表做一个备份,以防万一。

4,备份,备份,备份。

如果真的按照上面的提醒来操作,也几乎不可能会出现误删的情况除非是SQL自身存在逻辑不严谨问题 :)

如果确实误删了,该怎么办?

1,InnoDB表中delete命令并不擦除真实的数据,只是做了一个删除标记,实际的数据内容依然存在。如果发现及时并且运气也不错,暂停下业务防止数据被物理覆盖,立即将数据文件拷贝出来,然后解析数据文件,使用percona的undrop-innodb工具进行最后的尝试。

2,如果开启了binlog,情况要好很多,将历史的binlog文件集中起来,解析出来全部的和所操作的表有关的SQL,剔除这条误删数据的delete命令,然后恢复数据。可以参考MySQL恢复误删的数据。

3,如果有备份,那么可以通过解析备份文件,将表数据提取出来进行恢复(备份文件过大如何提取部分数据,后续将探讨这个情况)。需要注意的是,备份结束后到误操作前这段时间内所产生的数据将无法找回,用历史数据回滚的数据不完整性需要自行评估,有其他条件可以补全数据的最好。

4,有些系统开启了日志功能,并且日志历史也均保留了下来,也可以尝试查找查找。

如何避免这种灾难式的事情发生?这个可能是更多人关注也更有意义的事。

1,不使用数据库,这样就没有烦恼了。

2,参考前面的提醒,对生产环境存敬畏之心,谨慎操作、流程化操作,则问题出错的概率将可以降低到最小、影响面减少到最小。

3,也可以将数据库维护的苦活、累活、脏活交给我们来操作,毕竟我们又稳又好用,所有操作都熟。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180508A0L0V400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券