【问题标题】:Create mongo backup/restore without indexes创建不带索引的 mongodb 备份/恢复
【发布时间】:2015-03-12 01:26:10
【问题描述】:

我想知道如何在不备份、恢复索引的情况下创建 mongodump/mongorestore?

以及如何在不恢复索引的情况下增量恢复 mongo db?

【问题讨论】:

  • 在没有索引的情况下恢复的目标是什么?此外,这个问题属于 DBA StackExchange,但我认为它会被迁移:)。
  • 我目前正在开发一个项目,其中部署了 3 个版本,但至少 60% 的索引未正确设置,因此我们想重新索引数据库,并且我们想将 mongo 从 solaris 移动到基于linux的服务器,目前的索引重建需要很长时间,既然是重建它们,就不需要它们了!

标签: mongodb


【解决方案1】:
sudo mongorestore --db dbName ./dumpPath/  --noIndexRestore

【讨论】:

  • 介意您解释一下您的解决方案吗?干杯!
  • 这是上一个答案的简短版本。
【解决方案2】:

mongodump 实用程序从 MongoDB 创建数据的二进制导出,并将索引定义和集合选项保存在与每个转储数据库关联的 metadata.json 中。索引详细信息在备份中不会占用任何重要空间,mongorestore 通常会使用这些详细信息在从转储中导入每个集合的每个数据后重新确保索引。

如果您想避免在还原完成后创建任何新的二级索引,mongorestore 有一个 --noIndexRestore option

注意:default _id index 是必需的,并且始终创建。

在不恢复索引的情况下增量恢复一个 mongo db?

--noIndexRestore 的选项适用于您是否要还原到现有数据库。如果您使用mongorestore 选项将mongorestore 插入到具有索引的现有数据库中,则不会添加新的索引定义,但仍会在插入数据时更新现有索引。

增量备份和恢复实际上是一个单独的问题,除非您有一个简单的用例:从连续转储中插入新文档。

在 MongoDB 2.6 中,mongorestore 实用程序仅插入文档(即没有更新/更新插入选项)。您可以使用mongorestore 将多个转储插入到现有集合中,但任何导致重复键异常的文档(例如_id)都将被跳过。

我通常认为增量备份和恢复意味着进行增量更改(自上次备份以来的所有插入/更新/删除)并能够将这些更改重新应用于相同数据的旧副本。要实现增量备份,您需要数据更改历史记录,在 MongoDB 的情况下,这将由副本集 operation log (oplog) 提供。

【讨论】:

  • 对于您可能希望从转储中添加新文档/更新但从不删除数据的归档用例,您可能会发现在 MongoDB 问题跟踪器中观看/支持 TOOLS-121: Add upsert option to MongoRestore 很有用。通过mongorestore 进行更新肯定是一个更专业的用例,然后进行适当的增量备份/恢复,并可能导致与原始数据库的分歧。
猜你喜欢
  • 2016-08-10
  • 2021-02-05
  • 1970-01-01
  • 2014-08-10
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
相关资源
最近更新 更多