在archlinux上mongodump一个db

时间:2015-11-16 10:17:25

标签: mongodb archlinux mongodump

我尝试备份我当地的mongodb。我使用archlinux并安装了mongodb-tools以便使用mongodump。 我试过了:

mongodump --host localhost --port 27017 
mongodump --host localhost --port 27017 --db mydb

每次我都有同样的回应:

Failed: error connecting to db server: no recheable server

然而,我可以使用

连接到数据库
mongo --host localhost --port 27017

或只是

mongo

我的mongodb版本是3.0.7。 我没有设置任何用户名/密码

如何正确使用mongodump备份本地数据库?

2 个答案:

答案 0 :(得分:1)

这似乎是mongodump工具中的错误,有关详细信息,请参阅此JIRA票证。如果明确指定IP地址,则应该能够使用mongodump

mongo --host 127.0.0.1 --port 27017

答案 1 :(得分:0)

在这种情况下,“正确”是一个非常主观的术语。给你一个印象:

mongodump和mongorestore并不是非常快。在分片环境中,他们可以为合理大小的数据库采用 s (请注意复数!)。这反过来意味着在最糟糕的情况下,您可以放弃数天的数据。此外,在备份期间,数据可能会发生很大变化,因此备份状态可能不一致。在这方面,最好将mongodump视为“mongodumb”。 您的应用程序必须能够优雅地处理缺乏一致性,这可能是一个非常痛苦的问题。此外,较长的恢复时间会花费金钱和(有时甚至更重要的)声誉。

我个人仅在两种情况下使用mongodump:备份分片群集元数据(大小只有几MB)和(相对)便宜的数据,这很容易通过其他方式重新获得。

为了正确地进行MongoDB备份,imho只有三种选择:

  1. MongoDB Inc的云备份,
  2. MongoDB Ops Manager
  3. 文件系统快照
  4. Cloud backup

    它有几个优点。您可以进行时间点恢复,保证数据库处于选定时间点的一致状态。它的设置和维护非常简单。 然而,你猜对了,它附带了一个基于数据波动性和整体规模的价格标签,对于具有低到中等波动性的中小型数据来说,这是合理的。

    MongoDB Ops Manager

    作为云备份的本地版本(它还有其他一些超出此答案范围的功能),它提供了相同的好处。它更适合大规模中等规模到大型数据库或具有不成比例的高波动性的数据库(与数据大小相比较高的“OplogGb / h”值)。

    文件系统快照

    嗯,它有点便宜。只需制作快照,安装它,将其复制到某个备份空间,卸载并销毁快照,可选择压缩复制的数据即可完成。但是有一些警告。

    同步

    要获得一致数据的备份,您需要在分片群集上同步快照。特别是因为分片群集元数据也需要与备份保持一致,如果您想要中途快速恢复。这可能会变得有点棘手。要确保数据一致,您需要断开所有mongos,停止平衡器,将数据fsync到每个节点上的文件,制作快照,再次启动平衡器并重新启动所有{{1} }。要使正确同步,每次进行备份时都需要几分钟的维护时间。

    请注意,对于简单的副本集,不需要同步,并且备份可以正常运行。

    过供应

    文件系统快照适用于所谓的“写时复制”(CoW)。稍微简化:当您创建快照并修改文件时,会复制该文件并将更改应用于新复制的文件。但是,快照指向旧文件。很明显,为了能够创建快照,按照CoW,您需要一些额外的磁盘空间,以便MongoDB可以在处理快照时工作。让我们假设一个最糟糕的情况,其中所有数据都已更改 - 您需要至少100%的数据大小过度配置MongoDB的分区,或者换句话说,您的关键磁盘利用率为50 %减去您需要扩展的时间的某个阈值。当然,这有点夸张,但你得到了图片。

    结论

    恕我直言,适当的备份应该这样做:

    • mongorestore获取便宜的数据并且不太关心一致性
    • 副本集的文件系统快照
    • 针对具有低到中等波动率的中小型分片数据库的云备份
    • Ops Manager备份适用于具有不成比例的高波动性的大型数据库或中小型数据库

    如上所述:“正确”在备份方面是一个非常主观的术语。 ;)