如何在中断后restart/resume copydb() in mongodb?

How to restart/resume copydb() in mongodb after interruption?

mongodb 在执行 copyDb() 命令时被中断。当我想重新启动时,我得到:

db.runCommand( { copydb: 1, fromhost: "<ip>", fromdb: "<collection>", todb: "<db>", slaveOk: true } );
{
    "ok" : 0,
    "errmsg" : "failed to create collection \"<db>.<collection>\": collection already exists"
}

有没有办法在中断后恢复数据库的副本,或者我是否需要删除数据库并从头开始? (这不是一个好的选择,因为复制需要大约 10 天,而已经 运行 2 天)。

简短的回答是否定的,没有内置的方法来恢复 copydb 操作,它基本上 requires/assumes 在操作期间两端的 100% 可用性。要重新使用 copydb 命令,您必须删除目标数据库并从头开始重新启动副本。

除了自己编写代码(这始终是一个选项)之外,我所知道的唯一可以提供接近简历的工具是 hydra,在这种情况下,该功能仅用作一种从几乎完整的副本中挑选少量散乱者的方法。

另一个可能的选择是使用 MMS Backup(完全披露:我目前在 MongoDB 工作,它提供 MMS 备份作为付费服务),这将创建定期快照备份数据库的数据,包括索引。然后可以使用这些快照通过简单的 download/transfer 恢复到其他节点,而不是依赖复制命令。