2012-01-19 75 views
8

像標題所說,我有一個MongoDBGridFS數據庫與一整套文件類型(例如,文本,pdf,xls),我想備份這個數據庫的最簡單的方法。如何備份MongoDB GridFS數據庫是最簡單的方法?

複製不是一個選項。最好我想用通常的數據庫方式將數據庫轉儲到文件中,然後備份該文件(如果需要,可以使用該文件在100%以後恢復整個數據庫)。這可以通過mongodump完成嗎?我也希望備份是增量式的。這是GridFSmongodump的問題嗎?

最重要的是,這是做到這一點的最佳方式?我不是那麼熟悉MongoDB,會不會mongodump工作以及mysqldump確實與MySQLMongoDBGridFS和增量備份的最佳做法是什麼?

我正在運行Linux如果這有什麼區別。

回答

15

GridFS將文件存儲在兩個集合中:fs.files和fs.chunks。

更多這方面的信息可以在GridFS的說明文件中找到: http://www.mongodb.org/display/DOCS/GridFS+Specification

兩個集合可以使用mongodump,同任何其他集合進行備份。在mongodump文檔可以在這裏找到: http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-mongodump

從終端,這看起來像以下:

對於本演示中,我的數據庫名稱是「GridFS的」:

首先,mongodump用於備份的fs.files和fs.chunks集合到一個文件夾在我的桌面上:

$ bin/mongodump --db gridFS --collection fs.chunks --out /Desktop 
connected to: 127.0.0.1 
DATABASE: gridFS  to  /Desktop/gridFS 
    gridFS.fs.chunks to /Desktop/gridFS/fs.chunks.bson 
     3 objects 
$ bin/mongodump --db gridFS --collection fs.files --out /Desktop 
connected to: 127.0.0.1 
DATABASE: gridFS  to  /Desktop/gridFS 
    gridFS.fs.files to /Users/mbastien/Desktop/gridfs/gridFS/fs.files.bson 
     3 objects 

現在,mongorestore用於備份的收藏拉入一個新的(對惡魔的目的登記領)被稱爲「gridFScopy」

$ bin/mongorestore --db gridFScopy --collection fs.chunks /Desktop/gridFS/fs.chunks.bson 
connected to: 127.0.0.1 
Thu Jan 19 12:38:43 /Desktop/gridFS/fs.chunks.bson 
Thu Jan 19 12:38:43  going into namespace [gridFScopy.fs.chunks] 
3 objects found 
$ bin/mongorestore --db gridFScopy --collection fs.files /Desktop/gridFS/fs.files.bson 
connected to: 127.0.0.1 
Thu Jan 19 12:39:37 /Desktop/gridFS/fs.files.bson 
Thu Jan 19 12:39:37  going into namespace [gridFScopy.fs.files] 
3 objects found 

數據庫現在蒙戈shell啓動,以便還原過程可以驗證:

$ bin/mongo 
MongoDB shell version: 2.0.2 
connecting to: test 
> use gridFScopy 
switched to db gridFScopy 
> show collections 
fs.chunks 
fs.files 
system.indexes 
> 

館藏fs.chunks和fs.files已成功恢復新的數據庫。

您可以編寫腳本來定期對fs.files和fs.chunks集合執行mongodump。

至於增量備份,它們並不真正被MongoDB支持。一個谷歌搜索「MongoDB的增量備份」揭示了關於這個問題的一個很好的MongoDB用戶的谷歌網上論壇討論: http://groups.google.com/group/mongodb-user/browse_thread/thread/6b886794a9bf170f

對於連續起坐,很多用戶使用的副本集。 (意識到在你原來的問題中,你說這不是一種選擇,這是包括在社區的其他成員,他們可能正在閱讀這個答案。)一個副本集的成員可以隱藏起來,以確保它永遠不會成爲小學,永遠不會被讀取。有關詳細信息,請參閱副本集配置文檔的「成員選項」部分。 http://www.mongodb.org/display/DOCS/Replica+Set+Configuration#ReplicaSetConfiguration-Memberoptions

+0

雖然MongoDB沒有任何增量備份功能,但是任何外部增量備份工作至少應該能夠看到新舊fs.files/fs.chunks並且只備份新的備份?我打算玩一下,看看。我腦海中的複製有點粗略,我討厭依賴MongoDB本身進行備份。另外理想情況下,我希望每日快照用於存檔目的。非常感謝,非常豐富。 – c00kiemonster

+2

如果目標集合已經存在,mongorestore將遍歷每個文檔的_id並僅添加新文檔。 您可以向mongodump提供查詢,因此如果您的文檔包含「上次更新」字段或同等字段,則只能轉儲上次備份日期之後更新或添加的文檔。 您還可以讓另一個實用程序備份您的dbpath目錄。在關於備份的Mongo文檔的「啓用日誌的備份」和「關閉和備份」部分中有一些註釋。 http://www.mongodb.org/display/DOCS/Backups – Marc

+0

這會非常方便。謝謝你的提示 – c00kiemonster

相關問題