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条件,导致全表更新,这是作为运维或者 ...
随机推荐
- [ python ] 类中的一些特殊方法
item系列 __getitem__(self, item) 对象通过 object[key] 触发 __setitem__(self, key, value) 对象通过 object[key] = ...
- CSS3 icon font
大家都知道现在各个浏览器都支持CSS3的自定义字体(@font-face),包括IE6都支持,只是各自对字体文件格式的支持不太一样.那么对于网站中用到的各种icon,我们就可以尝试使用font来实现, ...
- linux命令(13):kill/killall命令
停止指定的进程名:kill 进程ID号 把所有httpd进程杀掉:killall httpd 强制停止进程mysqld:killall -9 mysqld
- ibatis的动态Mapped Statement 标签
动态Mapped Statement 直接使用JDBC 一个非常普遍的问题是动态SQL.使用参数值.参数本身和数据列都是动态的SQL,通常非常困难.典型的解决方法是,使用一系列if-else 条件语句 ...
- 如何开启apache的PHP-FPM实例
PHP-FPM 作为 FastCGI 进程管理器而广为熟知,它是PHPFastCGI 实现的改进,带有更为有用的功能,用于处理高负载的服务器和网站.下面列出其中一些功能: 新功能 拥有具有优雅(gra ...
- react native 生成APK
参考地址:React native Android 命令 打包apk 首先:尝试使用模拟器测试 这里是因为需要确认目前在电脑上的模拟器是可以正常运行的,并且,开发React native的应用程序,肯 ...
- 一个Apache安装多个版本的PHP
我的服务器centos6.5安装了xampp,php6.5版本的.已经有好几个网站在上面运行了,但是后面要安装该死的ecshop,无奈要装php5.2,因此就想如何能在一个apache上安装多个版本的 ...
- HDU 4607.Park Visit-树的直径(BFS版)+结论公式(乱推公式)-备忘(加油!)
Park Visit Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 合并区间(LintCode)
合并区间 给出若干闭合区间,合并所有重叠的部分. 样例 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 1 ...
- 【Bzoj4555】【Luogu P4091】求和(NTT)
题面 Bzoj Luogu 题解 先来颓柿子 $$ \sum_{i=0}^n\sum_{j=0}^iS(i,j)2^jj! \\ =\sum_{j=0}^n2^jj!\sum_{i=0}^nS(i,j ...