10

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

复制不是一种选择。最好我想用通常的数据库方式将数据库转储到文件,然后备份该文件(如果需要,以后可以用它来恢复整个数据库 100%)。可以这样做mongodump吗?我还希望备份是增量的。GridFS和会有问题mongodump吗?

最重要的是,这是最好的方法吗?我不是那么熟悉,MongoDB会和吗?增量备份的最佳实践是什么?mongodumpmysqldumpMySQLMongoDB GridFS

Linux如果这有什么不同,我会跑步。

4

1 回答 1

18

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-user 谷歌组关于这个主题的讨论: http ://groups.google.com/group/mongodb-user/browse_thread/thread/6b886794a9bf170f

对于连续备份,许多用户使用副本集。(意识到在您最初的问题中,您说这不是一个选项。这包括给可能正在阅读此回复的其他社区成员。)可以隐藏副本集的成员以确保它永远不会成为主要的,永远不会被读取。有关这方面的更多信息,请参阅副本集配置文档的“成员选项”部分。 http://www.mongodb.org/display/DOCS/Replica+Set+Configuration#ReplicaSetConfiguration-Memberoptions

于 2012-01-19T18:09:05.113 回答