2016-08-23 97 views
0

我的本地机器上有一个相当小的MongoDB实例(15GB),但我需要将它推送到远程服务器,以便我的合作伙伴处理它。问题是双重的,通过不稳定的连接传输MongoDB数据库

  1. 服务器只具有的可用空间30GB
  2. 我的本地网络连接很不稳定

我试图copyDatabase其直接转移,但还需要大约2直几天才能完成,其中连接几乎可以保证在某个时候失败。我也试过mongoexportmongodump,但都生成大约40GB的文件,这不适合服务器,这就忽略了首先传输40GB的困难。

有没有另一种更稳定的方法,我不知道?

+0

不是一个答案,而是一个选择,您可以将数据库拆分为少于1GB的数据片段并发送。如果它很重要,可以为磁盘创建快照并将快照复制到新磁盘,并将其发送给您的合作伙伴 –

+0

@JohnZeng我们都需要能够修改数据并查看更改,反复复制和删除整个数据库是一个选项,但没有一个我想使用 –

+0

但分裂的想法并不坏 –

回答

3

由于您的mongodump输出远远大于您的数据,因此我假设您使用的是MongoDB 3.0+和WiredTiger存储引擎,并且您的数据是压缩的,但是您的输出不是mongodump

与在MongoDB 3.2中一样,mongodumpmongorestore工具现在支持压缩(请参阅:Archiving and Compression in MongoDB Tools)。默认情况下不使用压缩。

对于所描述的,我建议你的使用情况:

  • 使用mongodump --gzip创建dump目录中所有集合的压缩备份。

  • 使用rsync --partial SRC .... DEST或类似的文件传输(可恢复)您的不稳定的互联网连接。

    注意:可能有一些目录,你可以告诉rsync忽略与--exclude;例如,可能会跳过localtest数据库。或者,您可能想要指定一个数据库以备份mongodump --gzip --db dbname

  • 您的合作伙伴可以使用类似的rsync命令行转移到它们的环境,并使用类似mongorestore --gzip /path/to/backup的命令行来填充其本地MongoDB实例。

  • 如果您打算继续转储转储,您可能会发现rsync--checksum选项对包含有用。通常,rsync根据文件大小和修改时间的快速比较传输“更新”文件。校验和涉及更多计算,但允许跳过与以前的备份具有相同数据的集合(除修改时间外)。

如果您需要在持续的基础上同步数据的变化,也可能是你更好的移动你的数据库云服务(如数据库作为一种服务提供商像MongoDB的阿特拉斯或您自己的MongoDB实例)。