【问题标题】:How can I backup a MongoDB GridFS database the easiest way?如何以最简单的方式备份 MongoDB GridFS 数据库?
【发布时间】:2012-02-14 04:07:04
【问题描述】:

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

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

最重要的是,这是最好的方法吗?我对MongoDB 不是很熟悉,mongodump 会像mysqldumpMySQL 一样工作吗? MongoDB GridFS 和增量备份的最佳做法是什么?

如果这有什么不同,我正在运行Linux

【问题讨论】:

    标签: mongodb backup gridfs


    【解决方案1】:

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

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

    【讨论】:

    • 虽然MongoDB没有任何增量备份能力,但是任何外部增量备份作业至少应该能看到有新旧fs.files/fs.chunks,只备份新那些?我打算玩一下看看。在我看来,复制有点粗略,我讨厌依赖 MongoDB 本身进行备份。另外,理想情况下,我想要一个用于归档目的的每日快照。非常感谢,非常有用。
    • 如果目标集合已经存在,mongorestore 会单步遍历每个文档的_id,只添加新文档。您可以向 mongodump 提供查询,因此如果您的文档包含“上次更新”字段或等效字段,您可以仅转储在上次备份日期之后更新或添加的文档。您还可以让另一个实用程序备份您的 dbpath 目录。在有关备份的 Mongo 文档的“启用日记功能的备份”和“关闭和备份”部分中对此有一些说明。 mongodb.org/display/DOCS/Backups
    • 这会非常方便。感谢您的提示
    猜你喜欢
    • 2021-08-11
    • 1970-01-01
    • 2021-01-01
    • 2013-03-23
    • 1970-01-01
    • 2013-05-24
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多