1

我尝试备份我的本地 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 备份我的本地数据库?

4

2 回答 2

1

这似乎是该mongodump工具中的一个错误,有关更多详细信息,请参阅此JIRA票证。mongodump如果您明确指定 IP 地址,您应该可以使用:

mongo --host 127.0.0.1 --port 27017
于 2015-11-16T10:40:56.093 回答
0

在这种情况下,“适当地”是一个高度主观的术语。给你一个印象:

mongodump 和 mongorestore 的速度并不快。在分片环境中,对于大小合理的数据库,它们可能需要day 注意复数!)。这反过来意味着,在最坏的情况下,您可能会丢失数天的数据。此外,在备份过程中,数据可能会发生很大变化,因此您的备份状态可能会不一致。在这方面,最好将 mongodump 视为“mongodumb”。您的应用程序必须能够优雅地处理缺乏一致性的问题,这可能是开发过程中相当痛苦的事情。此外,较长的恢复时间会耗费金钱和(有时甚至更重要的)声誉。

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

为了正确地进行 MongoDB 备份,恕我直言,只有三个选择:

  1. MongoDB Inc 的云备份,
  2. MongoDB 运营经理
  3. 文件系统快照

云备份

它有几个优点。您可以进行时间点恢复,保证数据库处于与所选时间点相同的状态。它非常容易设置和维护。但是,您猜对了,它带有基于数据波动性和整体规模的价格标签,恕我直言,这对于具有中低波动性的中小型数据是合理的。

MongoDB 运营经理

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

文件系统快照

嗯,它有点便宜。只需制作快照,挂载它,将其复制到某个备份空间,卸载并销毁快照,还可以选择压缩复制的数据,然后就完成了。不过,有一些警告。

同步

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

请注意,对于简单的副本集,不需要同步并且备份可以完美地工作。

过度配置

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

结论

恕我直言,应该以这种方式进行正确的备份:

  • mongorestore 用于廉价数据,很少关注一致性
  • 副本集的文件系统快照
  • 用于具有中低波动性的中小型分片数据库的云备份
  • 用于大型数据库或具有不成比例的高波动性的中小型数据库的 Ops Manager 备份

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

于 2015-11-16T11:57:59.107 回答