场景:我往同一个集合里面插入 三条数据  aa:aa  bb:bb  cc:cc 。后来我后悔了,不想插入 bb:bb,通过oplog重放过滤好 bb:bb这条数据。

原理:

  1.通过 oplog.rs 找到后悔那条命令的操作时间(ts)。 1521094621, 1

  2.恢复全量备份的数据,然后恢复从全量备份最后时间戳即到:1521094621, 0 前面。

  3.再恢复 1521094621, 1 后面的数据。即可成功绕过 bb:bb 执行这条命令。达到过滤的目录

笔者:

  在实现源库和目标库为同一个库的时候回复失败了。(有可能是不够细心操作出错,下次有空再细究)

  后来源库和目标库分开恢复的时候成功了。

实战备份篇:

.导出oplog.rs 通过关键字 找出 ts 关键字为:{"t":,"i":}

mongodump --authenticationDatabase admin -u root -p root --port  -h 127.0.0.1 -d local -c oplog.rs -o /opt/gettime/

bsondump /opt/gettime/local/oplog.rs.bson > alloplog.log

vim alloplog.log
{"ts":{"$timestamp":{"t":,"i":}},"t":{"$numberLong":""},"h":{"$numberLong":"-8782812939665643170"},"v":,"op":"i","ns":"debug.tiaos","o":{"_id":{"$oid":"5aaa0fd64a1c2a03e381218e"},"aaa":"aaa"}}
{"ts":{"$timestamp":{"t":,"i":}},"t":{"$numberLong":""},"h":{"$numberLong":""},"v":,"op":"i","ns":"debug.tiaos","o":{"_id":{"$oid":"5aaa0fdb4a1c2a03e381218f"},"bbb":"bbb"}}
{"ts":{"$timestamp":{"t":,"i":}},"t":{"$numberLong":""},"h":{"$numberLong":"-3595455147224912749"},"v":,"op":"i","ns":"debug.tiaos","o":{"_id":{"$oid":"5aaa0fdf4a1c2a03e3812190"},"ccc":"ccc"}} .获取错误操作前的数据 笔者是用来实验环境,即直接获取误操作前的无限值:mongodump --authenticationDatabase admin -u root -p root --port -h 127.0.0.1 -d local -c oplog.rs -q '{"ts" : {$lte : Timestamp(1521094621, 0)}}' -o /opt/start/
如果有全备份,即从全备的时间戳开始:mongodump --authenticationDatabase admin -u root -p root --port -h 127.0.0.1 -d local -c oplog.rs -q '{"ts" : {$gte : Timestamp(全部最后的时间戳, 0), $lte : Timestamp(1521094621, 0)}}' -o /opt/start/ ..获取错误操作后的数据
mongodump --authenticationDatabase admin -u root -p root --port -h 127.0.0.1 -d local -c oplog.rs -q '{ts:{$gt:Timestamp(1521094621, 1)}}' -o /opt/end/

实战恢复篇:把数据恢复到另外一个新的数据库。

.恢复误操作前的数据

如果有全部,先把每天的全备数据恢复一下。

mongorestore -h 192.168.0.2: --authenticationDatabase admin -u root -p root --oplogReplay /opt/start/

.恢复删除后的数据

mongorestore -h 192.168.0.2: --authenticationDatabase admin -u root -p root --oplogReplay /opt/end/

mongo 误操作恢复数据的更多相关文章

  1. 记一次生产mysql数据误操作恢复过程

    提示:建议每次对数据库进行修改时都做下备份 注意:以下Mysql开启的是row格式的binlog日志,确定到误操作具体时间可能有些麻烦,默认的格式就能很快找出来.这里开启row的原因是还有一种更快的方 ...

  2. SQL SERVER回滚恢复误操作的数据

    在生产数据库做CURD操作时,可能会有执行某条语句误操作的情况发生,针对这个种情况有两点建议: 1. 在SQL SERVER上开启事务确认功能,当执行完语句后确认无误,再提交事务.(开启方法见附件图片 ...

  3. Oracle数据库常见的误操作恢复方法(上)

    实验环境:Linux6.4 + Oracle 11g 面向读者:Oracle开发维护人员 概要: 1.误操作drop了emp表 2.误操作delete了emp表 3.误操作delete了emp表的部分 ...

  4. delete、update忘加where条件误操作恢复过程演示

    update.delete没有带where条件,误操作,如何恢复呢? 我现在有一张学生表,我要把小于60更新成不及格. mysql> select * from student; +----+- ...

  5. RAC环境下误操作将数据文件添加到本地存储

    今天碰到个有意思的事情,有客户在Oracle RAC环境,误操作将新增的数据文件直接创建到了其中一个节点的本地存储上. 发现网上去搜的话这种问题还真不少,对应解决方案也各式各样,客户问我选择哪种方案可 ...

  6. sql service ---- update和delete 误操作数据 ---- 恢复数据

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/8491327 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的 ...

  7. Oracle 恢复被删除的数据,解决误操作删除数据

    在删除数据的时候不小心,把delete语句执行错了,把别的表给delete,而且还执行了commit!真汗.......数据是相当的重要........废话少说了!赶快找方法吧: 第一种: 1.打开F ...

  8. MySQL 误操作后数据恢复(update,delete忘加where条件)

    在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句写的有问题导致服务器出问题,导致资源耗尽.最危险的操作就是在做DML操作的时候忘加where条件,导致全表更新,这是作为运维或者D ...

  9. MySQL 误操作后数据恢复(update,delete忘加where条件)【转】

    在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句 写的有问题导致服务器出问题,导致资源耗尽.最危险的操作就是在做DML操作的时候忘加where条件,导致全表更新,这是作为运维或者 ...

随机推荐

  1. MySQL:按后缀缀批量删除表格

    Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_schema='s ...

  2. MUI 页面刷新及页面传值问题

    一.页面刷新问题 1.父页面A跳转到子页面B,B页面修改数据后再跳回A页面,刷新A页面数据 (1).父页面A代码 window.addEventListener("pageflowrefre ...

  3. ORACLE中函数MONTHS_BETWEEN的使用

    格式:MONTHS_BETWEEN(DATE1,DATE2) MONTHS_BETWEEN函数返回两个日期之间的月份数. SQL> ', 'yyyymmdd')) as months from ...

  4. Linux 基础——ls 命令

    第二天,继续学习Linux命令... 一.查看文件和目录列表的命令 ls:显示当前目录下的文件和目录,但是不会显示隐藏的文件和目录. ls -a:显示当前目录下的所有文件和目录. ls -l:显示当前 ...

  5. AC日记——The Shortest Path in Nya Graph hdu 4725

    4725 思路: 拆点建图跑最短路: 代码: #include <cstdio> #include <cstring> #include <iostream> #i ...

  6. linux下c获取时间

    头文件 #include "sys/time.h" 结构体 struct timezone { int tz_minuteswest; /*格林威治时间往西方的时差*/ int t ...

  7. Java中 @override 报错

    报错问题: 在我们导入别人的项目的时候有可能会出现Java类报错,点击错误时提示让我们remove掉@override.这是JDK版本的问题导致的跟源码无关. 解决方法: 方案1.直接删除掉报错的@o ...

  8. python 正则表达式匹配中文(转)

    网上的一篇文章,做了整理,作者已无从考证,谢谢了 s=""" en: Regular expression is a powerful tool for manipula ...

  9. jquery 获取鼠标坐标

    $("#x").text(event.pageX), $("#y").text(event.pageY);

  10. [Codeforces #174] Tutorial

    Link: Codeforces #174 传送门 A: 求原根的个数,有一条性质是原根个数为$\phi(\phi(n))$,多了一个不会证的性质 如果要确定哪些是原根的话还是要枚举,不过对于每个数不 ...