我在我的本地计算机上运行了一个相当小的MongoDB实例(15GB),但我需要将其推送到远程服务器以便我的合作伙伴处理它。问题是双重的,
我尝试copyDatabase
直接转移它,但是大约需要连续两天才能完成,其中连接几乎可以保证在某些时候失败。我也尝试了mongoexport
和mongodump
,但两者都产生了大约40GB的文件,这些文件不适合服务器,并且忽略了传输40GB的困难。第一名。
还有其他更稳定的方法我不知道吗?
答案 0 :(得分:3)
由于您的mongodump
输出比您的数据大得多,我假设您将MongoDB 3.0+与WiredTiger存储引擎一起使用并且您的数据已被压缩,但您的mongodump
输出不是
与MongoDB 3.2一样,mongodump
和mongorestore
工具现在支持压缩(请参阅:Archiving and Compression in MongoDB Tools)。默认情况下不使用压缩。
对于您所描述的用例,我建议:
使用mongodump --gzip
创建一个dump
目录,其中包含所有馆藏的压缩备份。
使用rsync --partial SRC .... DEST
或类似内容通过不稳定的互联网连接进行(可恢复)文件传输。
注意:您可以告诉某些目录rsync
忽略--exclude
;例如,可能会跳过local
和test
数据库。或者,您可能希望使用mongodump --gzip --db dbname
指定要备份的数据库。
您的合作伙伴可以使用类似的rsync
命令行转移到他们的环境,并使用mongorestore --gzip /path/to/backup
这样的命令行来填充他们的本地MongoDB实例。
如果您要持续转移转储,您可能会发现rsync
的{{1}}选项非常有用。通常--checksum
转移"更新"基于文件大小和修改时间的快速比较的文件。校验和涉及更多计算,但允许跳过与先前备份具有相同数据的集合(除了修改时间)。
如果您需要持续同步数据更改,您也可以更好地将数据库移动到云服务(例如,像MongoDB Atlas这样的数据库即服务提供商或您自己的MongoDB实例)。