mongo 误操作恢复数据
场景:我往同一个集合里面插入 三条数据 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 误操作恢复数据的更多相关文章
- 记一次生产mysql数据误操作恢复过程
提示:建议每次对数据库进行修改时都做下备份 注意:以下Mysql开启的是row格式的binlog日志,确定到误操作具体时间可能有些麻烦,默认的格式就能很快找出来.这里开启row的原因是还有一种更快的方 ...
- SQL SERVER回滚恢复误操作的数据
在生产数据库做CURD操作时,可能会有执行某条语句误操作的情况发生,针对这个种情况有两点建议: 1. 在SQL SERVER上开启事务确认功能,当执行完语句后确认无误,再提交事务.(开启方法见附件图片 ...
- Oracle数据库常见的误操作恢复方法(上)
实验环境:Linux6.4 + Oracle 11g 面向读者:Oracle开发维护人员 概要: 1.误操作drop了emp表 2.误操作delete了emp表 3.误操作delete了emp表的部分 ...
- delete、update忘加where条件误操作恢复过程演示
update.delete没有带where条件,误操作,如何恢复呢? 我现在有一张学生表,我要把小于60更新成不及格. mysql> select * from student; +----+- ...
- RAC环境下误操作将数据文件添加到本地存储
今天碰到个有意思的事情,有客户在Oracle RAC环境,误操作将新增的数据文件直接创建到了其中一个节点的本地存储上. 发现网上去搜的话这种问题还真不少,对应解决方案也各式各样,客户问我选择哪种方案可 ...
- sql service ---- update和delete 误操作数据 ---- 恢复数据
原文出处:http://blog.csdn.net/dba_huangzj/article/details/8491327 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的 ...
- Oracle 恢复被删除的数据,解决误操作删除数据
在删除数据的时候不小心,把delete语句执行错了,把别的表给delete,而且还执行了commit!真汗.......数据是相当的重要........废话少说了!赶快找方法吧: 第一种: 1.打开F ...
- MySQL 误操作后数据恢复(update,delete忘加where条件)
在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句写的有问题导致服务器出问题,导致资源耗尽.最危险的操作就是在做DML操作的时候忘加where条件,导致全表更新,这是作为运维或者D ...
- MySQL 误操作后数据恢复(update,delete忘加where条件)【转】
在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句 写的有问题导致服务器出问题,导致资源耗尽.最危险的操作就是在做DML操作的时候忘加where条件,导致全表更新,这是作为运维或者 ...
随机推荐
- centos安装ss教程
在CentOS 6.6上安装ShadowSocks服务端 1.查看系统[root@localhost ~]# cat /etc/issue CentOS release 6.6 (Final) [ro ...
- maven项目的多级目录
刚刚把一个开源的项目变成maven项目来进行管理,由于是多级的目录(以前配置的都是单级的目录),所以记录一下pom文件是怎么配置的. 一.目录结构 如下,maven的结构图,红字是表示完整的项目
- Idea创建模板
新建文件模板 /** * * @author zenglw * @date ${DATE} */ Mapper #if (${PACKAGE_NAME} && ${PACKAGE_NA ...
- LeetCode解题报告—— Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- [转载]Python命令行参数学习
转载自: http://blog.163.com/weak_time/blog/static/25852809120169333247925/ Python的命令行参数,提供了很多有用的功能,可以方便 ...
- 四十六 常用内建模块 itertools
Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个“无限”迭代器: >>> import itertools ...
- BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 3519 Solved: 1493[Submit][Status][Discu ...
- [hdu-3007]Buried memory 最小覆盖圆
大致题意: 平面上有n个点,求一个最小的圆覆盖住所有点 最小覆盖圆裸题 学习了一波最小覆盖圆算法 #include<cstdio> #include<iostream> #in ...
- nio案例一:个简单的客户-服务的案例
<Java NIO文档>非阻塞式服务器 原文连接 原文作者:Jakob Jenkov 译者:higher 即使你知道Java NIO 非阻塞的工作特性(如Selector,Channel, ...
- Bzoj2721 [Violet]樱花(筛法)
题面 题解 首先化一下式子 $$ \frac 1x+\frac 1y=\frac 1{n!} \Rightarrow \frac {x+y}{xy}=\frac 1{n!} \Rightarrow ( ...