如何以最简单的方式备份MongoDB GridFS数据库?

时间:2012-01-19 13:44:24

标签: mongodb backup gridfs

就像标题所说,我有一个MongoDB GridFS数据库,包含各种文件类型(例如,text,pdf,xls),我想以最简单的方式备份这个数据库。

复制不是一种选择。我喜欢以通常的数据库方式将数据库转储到文件然后备份该文件(如果需要可以用于100%以后恢复整个数据库)。可以用mongodump完成吗?我还希望备份是增量备份。这会是GridFSmongodump的问题吗?

最重要的是,这是最好的方式吗?我对MongoDB并不熟悉,mongodumpmysqldumpMySQL一起工作吗MongoDB?什么是GridFS Linux和增量备份的最佳做法?

如果这有任何不同,我正在运行{{1}}。

1 个答案:

答案 0 :(得分: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

现在启动了Mongo 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