2013-09-10 55 views
1

我有一個獨立的MongoDb實例。它有很多數據庫。我雖然只關心備份/恢復其中一個數據庫,我們稱之爲DbOne。恢復數據庫備份如何影響oplog?

使用(http://www.mongodb.com/blog/post/dont-let-your-standalone-mongodb-server-stand-alone)中的說明,我可以在此獨立服務器上創建一個oplog。

使用工具Tayra,我可以記錄/存儲oplog條目。能夠創建增量備份是我在獨立實例上啓用oplog的主要原因。

我打算採取完全備份,每天一次,使用命令

mongodump --db DbOne --oplog 

從我的理解,這個備份會包含我的分貝點即時快照。

假設我想放棄,因爲這個備份的所有更新,我刪除所有backedup OPLOG我只恢復這個完整的備份,使用命令

mongorestore --drop --db DbOne --oplogReplay 

在這一點上,我需要做一些事情來的oplog收集在local db? mongodb會自動從oplog中刪除與這個數據庫有關的條目嗎?因爲如果沒有,那麼Tayra最終不會找到這些oplog條目並重新備份它們?

Tbh,我還沒有在我的機器上試過這個。我希望有人可以指出一個列出支持/預期行爲的文檔。

+0

你有沒有試過這個,看它是否放棄了oplog條目? – Sammaye

+0

@Sammaye,正如我在問題結束時提到的,我沒有嘗試過。我的觀點是,當我嘗試它時,它會工作或不工作。無論如何,我不知道爲什麼。但是,如果我指出一些記載的行爲,那就是它的結局。 –

回答

0

我曾與一個MongoDB的服務器,設置爲只有1名成員設定一個副本試驗,提出問題後不久。然而,我忘了回答這個問題。

我使用mongodump --db DbOne --oplog進行備份。我執行了一些額外的更新。如果我運行mongorestore命令,保持MongoDB服務器原樣運行,即仍在複製下運行,那麼它將創建數千個oplog條目,其中一個用於db中每個集合的每個文檔。這是一個很大的混亂。

另一種方法是關閉MongoDb並將其作爲獨立實例啓動(即不作爲副本集運行)。現在,如果我要使用mongorestore進行恢復,oplog不會被觸及。這很糟糕,因爲oplog現在包含實際集合中不存在的條目。

我想要一種機制,可以將數據庫以及本地數據庫中的oplog信息還原到備份發生的時間。 mongodump不備份本地數據庫。

最終我停止使用mongodump,而是切換到備份整個數據目錄(停止mongodb後)。一旦我們切換到AWS,我可以使用EBS快照功能執行相同的操作。

0

我知道你想一個約mongorestore鏈接文檔: http://docs.mongodb.org/manual/reference/program/mongorestore/

據我瞭解,你想在備份時間點,然後恢復該備份。你上面列出的命令將做到這一點:

1)mongodump --db DbOne --oplog

2)mongorestore --drop --db DbOne --oplogReplay

但是,請注意, 「時間點」表示備份已被有效執行,當轉儲結束時,不是命令開始的那一刻。這是一個很好的細節,對你來說可能並不重要,但是爲了完整而包含在內。

讓我知道是否還有其他東西。

最佳, 查理