2012-08-15 29 views
6

我想每天備份一個單獨的mongodb數據庫,可能需要使用mongodump。爲了不丟失任何數據,我希望這是漸進的,所以如果在一天中出現問題,我需要能夠重播當天的變化,直到做完一個mongorestore之後的失敗點。想爲MongoDB做增量備份。日記? OPLOG?

我是否正確理解,我需要使用OPLOG這個?或者正在記錄答案?我試着做以下操作:

  1. 將我的mongo數據庫變成一個副本集,以便它創建一個oplog。 (這種感覺非常哈克)
  2. 重新啓動的mongod與--oplog選項
  3. 表演應該被記錄在OPLOG

但是從來都沒有被存儲在OPLOG變化。做這種增量備份的最佳方式是什麼?我基本上在尋找類似的方法來重放mysql binlog。

感謝

回答

5

的MongoDB不提供增量備份選項開箱即用,但它是可以做到的文件快照和回放OPLOG。您是否按照文檔中列出的步驟將您的服務器設置爲副本集? http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

你能告訴我們這些備份的目的嗎?你有沒有考慮在副本集中添加第二個節點來保證數據的持久性?

如果你已經通過設置服務器的副本集的成員的步驟走,你可以運行shell rs.status()?

另一個注意(只是爲了澄清) - 日誌並不意味着是一個備份策略;日誌記錄僅確保數據庫在發生故障轉移時可以返回到一致狀態。強烈建議使用日記啓用。

下面是備份MongoDB的文檔: http://www.mongodb.org/display/DOCS/Backups

+0

感謝您的澄清,我昨天看了更多,我明白需要發生什麼。我想要做的是做一個每日mongodump,將其保存到S3,並且每小時也將我的oplog保存到S3。我有,如果你會這麼好心將這兩項後續跟進問題: 1.我OPLOG存儲在本地數據庫和我能夠從現在的蒙戈外殼訪問它。要備份oplog,我可以將所有本地。(1-N)和local.ns文件複製到s3嗎? 2.什麼是重播oplogs的最佳方式?是mongorestore --oplogReplay足夠嗎? 非常感謝! – 2012-08-16 20:40:48

+2

mongodump --oplog確保任何OPLOG條目而轉儲發生可與mongorestore --oplogReplay重播創建。您不能使用mongorestore --oplogReplay來重放轉儲完成後發生的oplog操作。你可能會探討一個解決方案是轉儲OPLOG收集每隔一小時,並使用applyOps命令:http://docs.mongodb.org/manual/reference/commands/#applyOps – Jenna 2012-08-16 22:35:15

+1

這可能是哈克..但我認爲使用mongorestore --oplogReplay實際上工作。我所做的只是把oplog記錄下來,移動了最終的oplog.rs。bson'到'dump/oplog.bson'並運行mongorestore --oplogReplay。這是危險的嗎?如果是這樣,我一定會使用applyOps技術。 – 2012-08-16 23:29:10

0

做備份,最好的辦法是配置Ops Manager爲您的MongoDB的基礎設施的一部分,但它這樣做不僅僅是備份更多...