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/
  • 相关阅读:
    Linux中配置Aria2 RPC Server
    Ubuntu无法进入Windows的NTFS分区
    Visualbox在UEFI模式下无法正常引导
    pacman安装软件包出现损坏
    Windows下禁用锁屏热键WinKey+L
    Linux中无权限使用sudo
    Windows 10 MBR转GPT
    oh-my-zsh的安装与基本配置
    Raspbian开启root账户
    xrandr: 命令行修改分辨率工具
  • 原文地址:https://www.cnblogs.com/cp-miao/p/8573944.html
Copyright © 2011-2022 走看看