zoukankan      html  css  js  c++  java
  • 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 执行这条命令。达到过滤的目录

    笔者:

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

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

    实战备份篇:

    1.导出oplog.rs 通过关键字 找出 ts 关键字为:{"t":1521094621,"i":1}
    
    mongodump --authenticationDatabase admin -u root -p root --port 3717 -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":1521094616,"i":1}},"t":{"$numberLong":"1"},"h":{"$numberLong":"-8782812939665643170"},"v":2,"op":"i","ns":"debug.tiaos","o":{"_id":{"$oid":"5aaa0fd64a1c2a03e381218e"},"aaa":"aaa"}}
    {"ts":{"$timestamp":{"t":1521094621,"i":1}},"t":{"$numberLong":"1"},"h":{"$numberLong":"5308280040949638880"},"v":2,"op":"i","ns":"debug.tiaos","o":{"_id":{"$oid":"5aaa0fdb4a1c2a03e381218f"},"bbb":"bbb"}}
    {"ts":{"$timestamp":{"t":1521094625,"i":1}},"t":{"$numberLong":"1"},"h":{"$numberLong":"-3595455147224912749"},"v":2,"op":"i","ns":"debug.tiaos","o":{"_id":{"$oid":"5aaa0fdf4a1c2a03e3812190"},"ccc":"ccc"}}
    
    2.获取错误操作前的数据
    
    笔者是用来实验环境,即直接获取误操作前的无限值:mongodump --authenticationDatabase admin -u root -p root --port 3717 -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 3717 -h 127.0.0.1 -d local -c oplog.rs -q '{"ts" : {$gte : Timestamp(全部最后的时间戳, 0), $lte : Timestamp(1521094621, 0)}}' -o /opt/start/
    
    3..获取错误操作后的数据
    mongodump --authenticationDatabase admin -u root -p root --port 3717 -h 127.0.0.1 -d local -c oplog.rs -q '{ts:{$gt:Timestamp(1521094621, 1)}}' -o /opt/end/

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

    1.恢复误操作前的数据
    
    如果有全部,先把每天的全备数据恢复一下。
    
    mongorestore -h 192.168.0.2:3717 --authenticationDatabase admin -u root -p root --oplogReplay /opt/start/
    
    2.恢复删除后的数据
    
    mongorestore -h 192.168.0.2:3717 --authenticationDatabase admin -u root -p root --oplogReplay /opt/end/
  • 相关阅读:
    在WCF中使用Flag Enumerations
    WCF开发教程资源收集
    [转]WCF 4 安全性和 WIF 简介
    Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中]
    Asp.Net Web API 2第十八课——Working with Entity Relations in OData
    Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)
    Asp.Net Web API 2第十六课——Parameter Binding in ASP.NET Web API(参数绑定)
    Asp.Net Web API 2第十五课——Model Validation(模型验证)
    函数 生成器 生成器表达式
    函数的进阶
  • 原文地址:https://www.cnblogs.com/cp-miao/p/8573944.html
Copyright © 2011-2022 走看看