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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM