就像标题所说,我有一个MongoDB
GridFS
数据库,包含各种文件类型(例如,text,pdf,xls),我想以最简单的方式备份这个数据库。
复制不是一种选择。我喜欢以通常的数据库方式将数据库转储到文件然后备份该文件(如果需要可以用于100%以后恢复整个数据库)。可以用mongodump
完成吗?我还希望备份是增量备份。这会是GridFS
和mongodump
的问题吗?
最重要的是,这是最好的方式吗?我对MongoDB
并不熟悉,mongodump
会mysqldump
和MySQL
一起工作吗MongoDB
?什么是GridFS
Linux
和增量备份的最佳做法?
如果这有任何不同,我正在运行{{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