【问题标题】:mongorestore issue : Cannot restore users with schema version 1 to a system with server version 2.5.4 or greatermongorestore 问题:无法将架构版本 1 的用户还原到服务器版本 2.5.4 或更高版本的系统
【发布时间】:2014-08-07 11:49:38
【问题描述】:

我有一个在 mongo 2.4.8 上运行的 mongodb 生产数据库,我想升级到 2.6.x。

我们想要这样做的方法是首先使用mongorestore 将数据加载到另一个运行2.6.3 的服务器上。然而,在运行mongorestorecommand 时,我们得到以下错误:

Cannot restore users with schema version 1 to a system with server version 2.5.4 or greater

我找不到与此问题相关的任何内容,也不知道该怎么办。万一这很重要,数据库本身不是使用 mongo 2.4.x 从头开始​​创建的,而是使用以前的版本创建的。

我该怎么办?除了使用 mongorestore 之外,还有其他方法吗?

提前感谢您的帮助...

【问题讨论】:

  • 你知道创建数据库的版本是什么吗?你知道升级到 2.4 的步骤是什么吗?我建议阅读可以在网站链接部分找到的upgrade and changelog docs

标签: mongodb migration mongorestore


【解决方案1】:

您可以采用两种方法来使用 2.4 mongodump 升级您的用户架构。

1) 恢复到 MongoDB 2.4,然后升级到 2.6

这遵循正常的2.6 upgrade path。不要尝试将您的 2.4 备份直接mongorestore 到 2.6,而是还原到 2.4 实例,然后升级到 2.6。

建议在升级之前,通过 2.6 mongo shell 运行 db.upgradeCheckAllDBs()。由于 MongoDB 2.6 中的更改,这将检查任何潜在的 compatibility issues。例如,2.6 实现了对索引字段定义和键长度限制的更强执行。

2) 使用 2.4 mongorestore 还原到 MongoDB 2.6,然后升级用户架构

这种方法需要mongorestore的MongoDB 2.4版本

  • 启动您的 MongoDB 2.6 mongod 没有启用身份验证

  • mongorestore 使用 2.4 版本的 mongorestore 进行备份

  • 在您的 2.6 mongo shell 中运行 authSchemaUpgrade command

    db.adminCommand({authSchemaUpgrade: 1 });
    
  • 重新启动您的 2.6 mongod 并启用身份验证

【讨论】:

    【解决方案2】:

    我能想到的三种方法:

    1. 首先,如果您作为副本集运行,我会升级成员 逐个。如果你没有作为一个糟糕的副本集运行, MongoDB 真的不是为生产使用而设计的 实例。有关转换为副本集和滚动的详细信息 在这里升级: http://docs.mongodb.org/manual/release-notes/2.6-upgrade/ 在这里: http://docs.mongodb.org/v2.6/tutorial/convert-standalone-to-replica-set/#

    2. 其次,如果您在支持快照的文件系统上运行 (如 Amazon EBS 或 Linux LVM)您可以对数据库文件进行快照, 恢复到一个新的文件系统并使用启动一个新的 mongod 进程 2.6. http://docs.mongodb.org/manual/tutorial/backup-with-filesystem-snapshots/

    3. 第三,尝试通过 mongoexport 导出数据并通过 蒙哥进口。它与 mongodump/mongorestore 不同,所以它有 一些限制(它不是数据库的完整备份,只是一个 集合的文本转储)但可能会帮助您解决此问题 与 mongorestore:http://docs.mongodb.org/v2.6/core/import-export/

    【讨论】:

    • 您好,谢谢您的回答。我已经在使用副本集了。我知道逐个升级成员很神奇。我的问题是数据本身。我不想在为时已晚时发现问题。这就是我想在其他地方重新加载数据的原因。我知道如何导出数据并且已经有一个 mongodump 存档。
    • 仅供参考:mongoexport 不是数据库备份/恢复的推荐选项,因为它不能可靠地捕获类型信息,不包括索引定义,并且在集合级别运行。滚动升级确实是通常的方法,但滚动升级和 shapshots 并不能回答如何将具有 v1 用户模式的 2.4 mongodump 加载到需要 v2 模式的 2.6 服务器的原始问题;-)。