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

c00*_*ter 9 backup mongodb gridfs

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

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

最重要的是,这是最好的方式吗?我不是那么熟悉MongoDB,会mongodump工作,以及mysqldump与做MySQL?什么是最佳实践MongoDB GridFS和增量备份?

Linux如果这有任何区别,我正在跑步.

Mar*_*arc 16

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
Run Code Online (Sandbox Code Playgroud)

现在,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
Run Code Online (Sandbox Code Playgroud)

现在启动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
> 
Run Code Online (Sandbox Code Playgroud)

fs.chunks和fs.files集合已成功还原到新数据库.

您可以编写脚本以定期对fs.files和fs.chunks集合执行mongodump.

至于增量备份,MongoDB并不真正支持它们.Google搜索"mongodb incremental backup"显示了一个很好的mongodb用户Google网上论坛关于此主题的讨论:http: //groups.google.com/group/mongodb-user/browse_thread/thread/6b886794a9bf170f

对于连续备份,许多用户使用副本集.(意识到在您的原始问题中,您声明这不是一个选项.这包括在社区中可能正在阅读此响应的其他成员.)可以隐藏副本集的成员以确保它永远不会成为小学,永远不会被读.有关此内容的更多信息,请参见"副本集配置"文档的"成员选项"部分. http://www.mongodb.org/display/DOCS/Replica+Set+Configuration#ReplicaSetConfiguration-Memberoptions

  • 如果目标集合已存在,则mongorestore将逐步执行每个文档的_id并仅添加新文档.您可以向mongodump提供查询,因此,如果您的文档包含"上次更新"字段或等效字段,则只能转储在上次备份日期之后更新或添加的文档.您还可以使用另一个实用程序来备份dbpath目录.关于备份的Mongo文档中的"备份与日记功能已启用"和"关闭和备份"部分中有一些注释.http://www.mongodb.org/display/DOCS/Backups (2认同)