2017-08-07 53 views
0

我的mongodb今天遭到黑客入侵,所有數據都被刪除,黑客需要一定數額才能還清,我不會付錢給他,因爲我知道他不會將我的數據庫發回給我。我可以從mongo oplog恢復數據嗎?

但我已經oplog打開,我看到它包含超過30萬個文件,保存所有操作。

是否有任何工具可以從此日誌恢復我的數據?

回答

2

根據oplog的背後距離,您可以恢復部署。爲了以防萬一,我會建議您對dbpath的當前狀態進行備份。

請注意,有許多變量用於執行此類還原,因此成功絕不是保證。可以使用mongodumpmongorestore完成,但前提是您的oplog要回到開始時間(即部署首次創建時)。如果是這樣,您可以可能能夠恢復您的數據。如果沒有,你會在這個過程中看到錯誤。

  1. 安全做其他事情之前,你的部署。這種情況是由於缺乏安全性而產生的。 MongoDB中提供了廣泛的安全功能。詳情請查看Security Checklist page

  2. 使用mongodump --host <old_host> --username <user> --password <pwd> -d local -c oplog.rs -o oplogDump轉儲oppo集合

  3. 檢查oplog的內容以確定使用bsondump oplogDump/local/oplog.rs.bson發生有問題的丟棄操作時的時間戳。你在尋找一條線,看起來大約是這樣的:

    {"ts":{"$timestamp":{"t":1502172266,"i":1}},"t":{"$numberLong":"1"},"h":{"$numberLong":"7041819298365940282"},"v":2,"op":"c","ns":"test.$cmd","o":{"dropDatabase":1}}

    此行意味着一個dropDatabase()命令的test數據庫上執行。

    請注意{"$timestamp":{"t":1502172266,"i":1}}中的t值。

  4. 恢復使用mongorestore --host <new_host> --username <user> --password <pwd> --oplogReplay --oplogLimit=1502172266 --oplogFile=oplogDump/local/oplog.rs.bson oplogDump

    注意參數oplogLimit,這基本上是告訴mongorestore停止重播OPLOG一旦打的時間戳(這是dropDatabase命令的時間戳安全的新部署第3步:

    oplogFile參數是新的MongoDB 3.4。對於舊版本,你需要的oplogDump/local/oplog.rs.bson複製到轉儲目錄的根目錄名爲oplog.bson文件,如並從上面的示例命令中刪除oplogFile參數。

第4步後,如果您OPLOG回到剛開始的時候,你停在正確的時間OPLOG重播,希望你應該執行該命令dropDatabase之前的點看到你的數據。

+0

謝謝!我已成功恢復我的數據庫 –

相關問題