恢复mongodb<;mongodb 3.4中的3.0数据文件(.ns、.0、.1)

恢复mongodb<;mongodb 3.4中的3.0数据文件(.ns、.0、.1),mongodb,Mongodb,在一个两年前的服务器备份中,我发现了几个需要在当前版本的MongoDB(例如v3.4)中恢复的MongoDB集合。不幸的是,mongod--dbpath标志不再受支持,因此存储在.ns、.0和.1文件中的集合无法按预期转储和还原 我是否需要旧版本的MongoDB(MongoDB 3.4中仍然提供原始版本,它不再是默认的存储引擎 如果要读取由旧版本MongoDB创建的MMAP数据文件,您可以: 使用参数(或等效的配置文件)启动一个新的mongod实例,并使用MongoDB 3.4的mongodum

在一个两年前的服务器备份中,我发现了几个需要在当前版本的MongoDB(例如v3.4)中恢复的MongoDB集合。不幸的是,
mongod--dbpath
标志不再受支持,因此存储在.ns、.0和.1文件中的集合无法按预期转储和还原

我是否需要旧版本的MongoDB(MongoDB 3.4中仍然提供原始版本,它不再是默认的存储引擎

如果要读取由旧版本MongoDB创建的MMAP数据文件,您可以:

  • 使用参数(或等效的配置文件)启动一个新的
    mongod
    实例,并使用MongoDB 3.4的
    mongodump
    导出所需的集合

  • 使用MongoDB 2.6中的
    mongodump
    实用程序,该实用程序支持直接读取MMAP文件。仅当您的数据文件来自MongoDB 2.6或更早版本时,才建议使用此选项,因为2.6
    mongodump
    可能无法正确处理较新数据文件中的某些功能。第一种方法可能更为保守方便(和兼容)

  • 在3.4版的
    mongodump
    mongorestore
    中有几个功能将有助于数据迁移。特别是:通过stdin转储和还原的功能,在还原时和还原期间包括或排除

    我建议在新端口上启动第二个
    mongod
    实例。如果您有大量数据要传输,您可能希望在单独的服务器上运行此实例,以避免位于同一个
    mongod
    进程之间的RAM和I/O争用。通过
    mongodump
    转储的数据必须读入内存,然后
    mongorestore
    将写入数据并在目标服务器上重建所有索引

    例如:

        mongod --dbpath /path/to/mmapfiles --storageEngine mmapv1 --port 28000
    
    然后,您可以:

    • 使用类似以下命令行将单个集合转储到3.4实例中:

      mongodump --db test --collection books --port 28000 | mongorestore --port 27017
      
    • 使用带有通配符(
      *
      )的
      mongorestore--nsInclude
      选项选择一系列集合。例如,
      测试
      数据库中以
      b
      开头的所有集合:

      mongodump --db test --port 28000 | mongorestore --port 27017 --nsInclude 'test.b*'
      
    MongoDB 3.4中仍然提供原始版本,它不再是默认的存储引擎

    如果要读取由旧版本MongoDB创建的MMAP数据文件,您可以:

  • 使用参数(或等效的配置文件)启动一个新的
    mongod
    实例,并使用MongoDB 3.4的
    mongodump
    导出所需的集合

  • 使用MongoDB 2.6中的
    mongodump
    实用程序,该实用程序支持直接读取MMAP文件。仅当您的数据文件来自MongoDB 2.6或更早版本时,才建议使用此选项,因为2.6
    mongodump
    可能无法正确处理较新数据文件中的某些功能。第一种方法可能更为保守方便(和兼容)

  • 在3.4版的
    mongodump
    mongorestore
    中有几个功能将有助于数据迁移。特别是:通过stdin转储和还原的功能,在还原时和还原期间包括或排除

    我建议在新端口上启动第二个
    mongod
    实例。如果您有大量数据要传输,您可能希望在单独的服务器上运行此实例,以避免位于同一个
    mongod
    进程之间的RAM和I/O争用。通过
    mongodump
    转储的数据必须读入内存,然后
    mongorestore
    将写入数据并在目标服务器上重建所有索引

    例如:

        mongod --dbpath /path/to/mmapfiles --storageEngine mmapv1 --port 28000
    
    然后,您可以:

    • 使用类似以下命令行将单个集合转储到3.4实例中:

      mongodump --db test --collection books --port 28000 | mongorestore --port 27017
      
    • 使用带有通配符(
      *
      )的
      mongorestore--nsInclude
      选项选择一系列集合。例如,
      测试
      数据库中以
      b
      开头的所有集合:

      mongodump --db test --port 28000 | mongorestore --port 27017 --nsInclude 'test.b*'
      

    简单地从MongoDB 4.0降级到3.4就足以让我运行
    mongod--dbpath/path/to/mmapfiles
    。谢谢你的提示!简单地从MongoDB 4.0降级到3.4就足以让我运行
    mongod--dbpath/path/to/mmapfiles
    。谢谢你的提示!