mysql 找回误删表的数据办法

这篇具有很好参考价值的文章主要介绍了mysql 找回误删表的数据办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有备份的话很简单,只需要生成一个最近备份的数据 然后用mysqlbinlog找回备份时间点之后的数据 再恢复到现网即可。

要是没有备份 可能就会比较麻烦,找回数据的成本也是非常之高的.

下面介绍下 mysqlbinlog找回备份时间点之后的数据的办法:

做个简单的实验,将mysql的表数据删除之后,然后用mysqlbinlog 找回刚才删除的表的数据。

app表的创建时间和数据的插入: 2013-02-04 10:00:00

原理: mysqlbinlog

前提: mysql开启了bin log日志

测试删除之前:

 	mysql> show tables;
 +-----------------------+
 | Tables_in_report_sina |
 +-----------------------+
 | app                   |
 | test                  |
 +-----------------------+ 

复制

 	mysql> select now();
 +---------------------+
 | now()               |
 +---------------------+
 | 2013-02-04 11:45:44 |
 +---------------------+
 1 row in set (0.01 sec) 

复制

 
 mysql> select count(1) from app;
 +----------+
 | count(1) |
 +----------+
 |       10 |
 +----------+
 1 row in set (0.01 sec) 

复制

开始删除数据:

 	mysql> delete from app where id =1;
 Query OK, 1 row affected (0.00 sec) 

复制

 	mysql> 
 mysql> delete from  app where id <6;
 Query OK, 4 rows affected (0.01 sec)
 mysql> select count(1) from app;
 +----------+
 | count(1) |
 +----------+
 |        5 |
 +----------+
 1 row in set (0.00 sec) 

复制

 	mysql> select now();
 +---------------------+
 | now()               |
 +---------------------+
 | 2013-02-04 12:08:45 |
 +---------------------+ 

复制

开始找回数据:

1.找到bin log的位置:

 	/app/mysql/log 

复制

 	-rw-rw---- 1 mysql mysql  17K Feb  4 11:43 alert.log
 -rw-rw---- 1 mysql mysql 1.0K Nov  1 14:52 master-bin.000001
 -rw-rw---- 1 mysql mysql  126 Dec 25 14:00 master-bin.000002
 -rw-rw---- 1 mysql mysql  126 Dec 25 14:02 master-bin.000003
 -rw-rw---- 1 mysql mysql  126 Dec 25 14:02 master-bin.000004
 -rw-rw---- 1 mysql mysql  107 Dec 25 14:02 master-bin.000005
 -rw-rw---- 1 mysql mysql  13K Feb  4 12:02 master-bin.000006 

复制

可以看到 最近被修改的bin log 只有  master-bin.000006

(要是误删除跨越了好几个bin log 找回数据的时候就必须一个个的bin log日志去找回了)

将这一段时间所有执行的sql语句存入到 待恢复的 sql文件中。

mysqlbinlog --start-date='2013-02-04 10:00:00' --stop-date='2013-02-04 12:08:45' /app/mysql/log/master-bin.000006 >/app/mysql/mysql_restore_20130204.sql

当然在现网环境下 ,这个时间可能没那么的准确,并且还有其他事务sql语句的干扰。

创建临时数据库

create database for_bak;

导出当前数据库中被误删的表 app

mysqldump -uroot -ppwd my_db app > /app/mysql/app.sql

将现在的数据导入到临时表:

mysql -root -ppwd for_bak < /app/mysql/app.sql

我们再来看下 /app/mysql/mysql_restore_20130204.sql的部分内容: (可以看到罪恶的delete 语句)

 	SET TIMESTAMP=1359949544/*!*/;
 BEGIN
 /*!*/;
 # at 12878
 #130204 11:45:44 server id 1  end_log_pos 12975  Query thread_id=5 exec_time=974 error_code=0
 SET TIMESTAMP=1359949544/*!*/;
 delete from app where id =1
 /*!*/;
 # at 12975
 #130204 11:45:44 server id 1  end_log_pos 13002  Xid = 106
 COMMIT/*!*/;
 # at 13002
 #130204 11:45:44 server id 1  end_log_pos 13077  Query thread_id=5 exec_time=1013 error_code=0
 SET TIMESTAMP=1359949544/*!*/;
 BEGIN
 /*!*/;
 # at 13077
 #130204 11:45:44 server id 1  end_log_pos 13175  Query thread_id=5 exec_time=1013 error_code=0
 SET TIMESTAMP=1359949544/*!*/;
 delete from  app where id <6
 /*!*/;
 # at 13175
 #130204 11:45:44 server id 1  end_log_pos 13202  Xid = 107
 COMMIT/*!*/;
 DELIMITER ;
 # End of log file 

复制

可以看到 数据是什么时间点删除的 。  具体的时间也可以用 select from_unixtime(1359949544); 来查询

令人欣慰的是 create table app 语句和 insert 的语句也在这个文件之中。 在手工去掉 delete 语句之后 在临时库里面进行 source mysqlbinlog找回来的sql文件

就将app恢复到被删除之前的状态了。 然后将临时库的数据导入到现网数据(这个不是这篇文章的重点了)。

要是没有备份,要找回所有app表相关的数据 那可能就非常的麻烦了 尤其是 binlog文件非常多 而且每个都比较的大。

那样的话也只有从app的建立到现在 用mysqlbinlog来逐个的找回与app表相关dml操作的sql记录,然后整合恢复数据。

我想这种情况一般比较的少。虽然麻烦,但是也不是不能恢复。文章来源地址https://www.toymoban.com/news/detail-492486.html

到了这里,关于mysql 找回误删表的数据办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手机照片误删怎么办,电脑照片误删怎么办怎么才能找回,EasyRecovery来帮您

    手机照片误删怎么办,电脑照片误删怎么办怎么才能找回,EasyRecovery 2023来帮您!!! EasyRecovery 2023是一款操作安全、价格便宜、用户自主操作的 数据恢复 方案,它支持从各种各样的 存储介质 恢复删除 或者丢失的文件,其支持的媒体介质包括: 硬盘驱动器 、光驱、闪存、

    2024年02月12日
    浏览(66)
  • 【Linux】Vscode连接远程服务器:误删文件,如何找回

    如果你在 VS Code 的侧边栏中意外删除了一个文件,有几种方法可以尝试找回它: 1.1 第一个(有的可能不行) VS Code 会保留文件的历史记录,你可以尝试通过以下步骤找回文件: 打开命令面板:按下 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(Mac)。 在命令面板中输入 “Show File H

    2024年02月12日
    浏览(66)
  • 电脑记事本笔记误删如何找回?恢复删除的笔记方法

    电脑上有很多好用的记事本软件。以Windows电脑为例,比较经典的有txt记事本,每个记事本可以单独的文件形式保存,误删某个记事本文件后可通过回收站找回,还原恢复。而如果正编辑笔记的时候误删了笔记,还未保存的情况下可尝试使用Ctrl+Z撤回上一步操作,找回误删的笔

    2024年02月16日
    浏览(47)
  • MySQL 恢复误删数据

    MySQL 恢复误删数据,针对 window 和 Linux 均适用,只需要找到对应的 binlog 目录文件,默认就是 MySQL 安装目录下的 data 文件夹 一般误删数据,先停止所有操作,备份数据库 1、查看是否启用 binlog 日志 2、查看所有 binlog 日志 3、查看正在使用的日志 4、查找日志所在文件夹 5、

    2024年02月07日
    浏览(44)
  • mysql 删表引出的问题

    将测试环境的表同步到另外一个数据库服务器中,但有些表里面数据巨大,(其实不同步该表的数据就行,当时没想太多),几千万的数据!! 1. 既然已经把数据同步过来的话,那就直接delete掉就行,多大的事呢? 于是 复制 结果傻眼了,执行了一会儿就卡死了,对卡死了!

    2024年02月09日
    浏览(32)
  • MySQL之误删数据如何处理

    在工作中不管是程序bug,运维的失误,等,都有可能导致数据误删除,或者是误操作,此时我们就必须快速的恢复数据,避免对正常业务造成过大的影响,甚至出现事故,本文我们按照如下的几种情况来分析下误删数据如何处理: 下面我们就按照这个顺序来一起看下。 对于这

    2024年02月06日
    浏览(27)
  • 【MYSQL】误删数据恢复流程说明

    误删数据恢复流程说明 项目场景:使用navicat时,不小心误删除几条数据,需要对数据进行恢复 第一步:保证mysql已经开启binlog,查看命令 : 如果没有开启binlog,也没有预先生成回滚SQL,那可能真的无法快速回滚了。对存放重要业务数据的MySQL,强烈建议开启binlog。 查看bi

    2024年02月12日
    浏览(51)
  • MySQL数据库误删恢复

           经常听说删库跑路这真的不只是一句玩笑话,若不小心删除了数据库,事情很严重。你一个不小心可能会给公司删没。建议研发不要直连生成环境,一般的话都会分配账号权限,生产环境的账号尽量是只读,以防你一个不经意给库或表删除。一定要备份,这很重要,

    2024年02月08日
    浏览(62)
  • MySQL数据被误删怎么办?

    很多年前,被公司外派到一家单位驻场开发一个OA项目,两个开发对接各部门的需求,需求还要及时生效(一边开发一边使用)。有一次生产环境的一个bug本地没办法复现,由于没有测试人员,也就不存在测试环境,所以本地连了生产库去调试。不出意外的话要出意外了:在

    2024年02月01日
    浏览(42)
  • 【MySQL】更改表的主键报错及解决办法

    报错: [HY000][3750] Unable to create or change a table without a primary key, when the system variable ‘sql_require_primary_key’ is set. Add a primary key to the table or unset this variable to avoid this message. Note that tables without a primary key can cause performance problems in row-based replication, so please consult your DBA before changing

    2024年01月20日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包