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条件,导致全表更新,这是作为运维或者 ...
随机推荐
- Java-贪心算法
1. 什么是贪心算法? 贪心算法,又称贪婪算法(Greedy Algorithm),是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优解出发来考虑,它所做出的仅是在某种意义上的 ...
- MySQL查找出重复的记录
问题 查找表中多余的重复记录,重复记录是根据单个字段来判断的.例如:有张表中有uid和uname两个字段,现在需要查找出uname重复的所有数据列.数据表如下: id o_id uname 1 11 ...
- Longest Palindromic Substring (最长回文字符串)——两种方法还没看,仍需认真看看
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- 事务管理配置与@Transactional注解使用
spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framewor ...
- 【JBPM4】完成任务
示例代码: ProcessEngine processEngine = Configuration.getProcessEngine(); TaskService taskService = proc ...
- Linux下使用ssh远程登录服务器
如果自己的服务器是在内网,想在外网通过ssh在自己的VPS服务器上远程登录自己的内网服务器,可以按照如下操作: 一.在自己的服务器上使用如下命令: #ssh -CfnNT -R 端口A:localho ...
- jquery扩展插件,让demo元素也可以resize
(function($, h, c) { var a = $([]), e = $.resize = $.extend($.resize, {}), i, k = "setTimeout&q ...
- 洛谷P3805 [模板]Manacher算法 [manacher]
题目传送门 题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符 ...
- 洛谷P4609 [FJOI2016]建筑师(第一类斯特林数+组合数)
题面 洛谷 题解 (图片来源于网络,侵删) 以最高的柱子\(n\)为分界线,我们将左边的一个柱子和它右边的省略号看作一个圆排列,右边的一个柱子和它左边的省略号看作一个圆排列,于是,除了中间的最高的柱子 ...
- 常见OJ提交结果对照表
Waiting:你的程序刚刚提交,正在等待OJ评测你的程序. Compiling:OJ正在编译你的程序. Accepted:OK!你的程序是正确的 ^_^. Wrong Answer:你的 ...