在一个两年前的服务器备份中,我发现了一些我需要在当前版本的MongoDB中恢复的MongoDB集合(例如v3.4)。遗憾的是,不再支持mongod --dbpath
标志,因此无法按预期转储和恢复存储在.ns,.0和.1文件中的集合。
我是否需要旧版本的MongoDB(< 3.0.0)来转储这些数据文件,还是有一个更为突出的数据迁移解决方案?
答案 0 :(得分:1)
MongoDB 3.4中仍然可以使用原始的MMAPv1 storage engine,它不再是默认的存储引擎。
如果您想阅读旧版MongoDB创建的MMAP数据文件,您可以:
使用--storageEngine mmapv1
参数(或等效的配置文件)启动mongod
的新实例,并使用MongoDB 3.4的mongodump
导出所需的集合
使用MongoDB 2.6中的mongodump
实用程序,它支持--dbpath
parameter直接从MMAP文件中读取。仅当您的数据文件来自MongoDB 2.6或更早版本时,才建议使用此选项,因为2.6 mongodump
无法正确处理的较新数据文件中可能存在某些功能。第一种方法可能更方便(和兼容)。
3.4版mongodump
和mongorestore
中有几项功能可以帮助进行数据迁移。特别是:倾销和倾销的能力通过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*'