有备份的话很简单,只需要生成一个最近备份的数据 然后用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记录,然后整合恢复数据。

我想这种情况一般比较的少。虽然麻烦,但是也不是不能恢复。

以上这篇mysql 找回误删表的数据方法(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:mysql表物理文件被误删的解决方法

MySQL误操作后快速恢复数据的方法

关于mysql数据库误删除后的数据恢复操作说明

MySQL清空数据表的方法实例与分析

mysql 找回误删表的数据办法_mysql找回误删表的数据方法(必看)相关推荐

  1. mysql 列合并_mysql 列转行,合并字段的方法(必看)

    数据表: 列转行:利用max(case when then) max---聚合函数 取最大值 (case course when '语文' then score else 0 end) ---判断 a ...

  2. mysql表误删回复_mysql 找回误删表的数据方法(必看)

    有备份的话很简单,只需要生成一个最近备份的数据 然后用mysqlbinlog找回备份时间点之后的数据 再恢复到现网即可. 要是没有备份 可能就会比较麻烦,找回数据的成本也是非常之高的. 下面介绍下 m ...

  3. iphone11与android换机,苹果手机数据转移到新手机:iPhone 11用户换机必看——照片篇...

    原标题:苹果手机数据转移到新手机:iPhone 11用户换机必看--照片篇 之前我们整理了iPhone 11用户换新手机导入旧手机微信数据.备忘录数据以及通讯录的方法,除去以上几种数据项以外,还有一种 ...

  4. iphone11与android换机,苹果手机数据转移到新手机:iPhone 11用户换机必看——备忘录篇...

    原标题:苹果手机数据转移到新手机:iPhone 11用户换机必看--备忘录篇 最近很多用户将自己现在的苹果设备进行了升级,iPhone 11以其低价再次上演了"真香"警告.不知道你 ...

  5. mysql全表重命名备份_Mysql数据库和表的常用操作以及数据备份恢复

    数据库 查看所有数据库 show databases; 使用数据库 use 数据库名; 查看当前使用的数据库 select database(); 创建数据库 create database 数据库名 ...

  6. mysql删除myisam表数据影响_Mysql 下 Myisam表delete 后 数据恢复问题

    今日在修改过去的一个程序时, 不小时设置了错误的删除条件,导致几十万条数据丢失, 同时数据库没有打开日志和备份, 请教大侠,有什么方法可以恢复数据. 我已经将对应的三个表文件. MYD,MYI,frm ...

  7. mysql分库分表分页查询语句_MySQL分库分表分库后的查询(8th)

    前言 这边我们以使用python程序要展示一下再分库分表后,我们需要如何对数据库进行操作. python操作数据库 我们这边还是沿用之前的那5中:场景1:购买者下订单#!/usr/bin/env py ...

  8. mysql 建表时建立索引_mysql 分享建表和索引的几点规范

    一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. ...

  9. mysql将查到的数据删除_MySQL基本SQL语句之数据插入、删除数据和更新数据 | 旺旺知识库...

    一.INSERT插入数据: 方法一:批量插入 基本语法: INSERT INTO tb_name (col1, col2, ...) VALUES (val1, val2, ...)[,(val1, ...

最新文章

  1. 使用AndroidStudio编译NDK的方法及错误解决方案
  2. 架构师之路 — 业务架构 — Overview
  3. [MicroPython]TurnipBit开发板旋转按钮控制直流电机转速
  4. 原生态Vim使用快捷键
  5. 消除软硬件鸿沟,芯客网完美支持智能硬件在移动互联时代的爆发
  6. php实现跑马灯闪亮,易达CMS实现跑马灯特效!
  7. python调试器入门教程_PyCharm入门第一步(二)——调试第一个Python应用|python基础教程|python入门|python教程...
  8. linux 内存一直在增加,linux – 缓存内存和共享内存总和超过总内...
  9. Linux添加新硬盘-挂载硬盘,设置开机自动挂载 解决/home 空间不足问题
  10. 防火防盗竟防不了网络攻击智能摄像机的网络安全怎么办?
  11. 网易逆水寒服务器型号,从服务器爆满到无人问津的经典游戏
  12. LINUX上使用命令ln新建,修改链接
  13. ROS 机器人操作系统:概述
  14. 机房收费系统——可行性分析报告
  15. 2020德勤面试开始了吗_刚去四大(德勤)面试,我只说了三个字,就拿到了offer!...
  16. 软萌硬核科普必读《大圣陪你学AI》
  17. Windows 7 产品密钥是否安全
  18. Self-Supervised Learning of Pretext-Invariant Representation
  19. 【MATLAB】变量似乎会随迭代次数而改变,请预分配内存以获得更高的运算速度。
  20. TypeError: xxx() missing 1 required positional argument xxx

热门文章

  1. JH Win10系统
  2. 热锅热油,热锅冷油,热锅宽油,锅上火滑油,留底油区别
  3. 【转载】数字图像处理相关
  4. SAS常用基础代码例子-基础练习
  5. 区块链 扩展性解决方案 总结
  6. O-神上帝以及老天爷
  7. Git版本管理工具超详细(下载、安装、远程仓库的搭建、git指令)
  8. wps里为什么没有华文楷体_为什么山洞里的蜥蜴没有眼睛?
  9. 自学Python--网络编程之基础
  10. Android歌词秀设计思路歌词播放服务