在mongodb 3.4中恢复mongodb< 3.0数据文件(.ns,.0,.1)

时间:2017-08-28 09:07:24

标签: mongodb

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

我是否需要旧版本的MongoDB(< 3.0.0)来转储这些数据文件,还是有一个更为突出的数据迁移解决方案?

1 个答案:

答案 0 :(得分:1)

MongoDB 3.4中仍然可以使用原始的MMAPv1 storage engine,它不再是默认的存储引擎。

如果您想阅读旧版MongoDB创建的MMAP数据文件,您可以:

  1. 使用--storageEngine mmapv1参数(或等效的配置文件)启动mongod的新实例,并使用MongoDB 3.4的mongodump导出所需的集合

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

  3. 3.4版mongodumpmongorestore中有几项功能可以帮助进行数据迁移。特别是:倾销和倾销的能力通过stdin恢复,specify namespaces恢复时包含或排除,还原期间change collection namespaces

    我建议在新端口上启动第二个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选项与通配符(*)一起使用以选择一系列集合。例如,test数据库中以b开头的所有集合:

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