mongodump archlinux 上的数据库
mongodump a db on archlinux
我尝试备份本地 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。
我没有设置任何 username/password
如何正确使用 mongodump 来备份我的本地数据库?
这似乎是 mongodump
工具中的一个错误,有关详细信息,请参阅此 JIRA 票证。如果您明确指定 IP 地址,您应该可以使用 mongodump
:
mongo --host 127.0.0.1 --port 27017
"Properly" 在这种情况下是一个非常主观的术语。给你个印象:
mongodump 和 mongorestore 并不是非常快。在分片环境中,对于合理大小的数据库,他们可以花费 days(注意复数!)。这反过来意味着在最坏的情况下,您可能会丢失数天的数据。此外,在备份过程中,数据可能会发生很大变化,因此您的备份状态可能会不一致。这方面还是把mongodump想成"mongodumb"比较好。
您的应用程序必须能够优雅地处理缺乏一致性的问题,这在开发过程中可能会让人头疼。此外,较长的恢复时间会耗费金钱和(有时甚至更重要的)声誉。
我个人只在两种情况下使用 mongodump:备份分片集群元数据(大小只有几 MB)和(相对)便宜的数据,很容易通过其他方式重新获得。
为了正确地进行 MongoDB 备份,恕我直言,只有三个选择:
- MongoDB公司的云备份,
- MongoDB 运营经理
- 文件系统快照
Cloud backup
它有几个优点。您可以进行时间点恢复,保证数据库处于与所选时间点一致的状态。它非常容易设置和维护。
但是,您猜对了,它带有基于数据波动性和整体大小的价格标签,恕我直言,这对于具有低到中等波动性的中小型数据是合理的。
MongoDB Ops Manager
作为云备份的本地版本(它还有很多超出此答案范围的其他功能),它提供了相同的好处。它更适合中等规模到大型数据库或具有不成比例的高波动性的数据库(与数据大小相比,"OplogGb/h" 值较高)。
文件系统快照
嗯,有点便宜。只需制作一个快照,安装它,将其复制到某个备份 space,卸载并销毁快照,可选择压缩复制的数据,您就完成了。不过有一些注意事项。
同步
要获得一致数据的备份,您需要在分片集群上同步您的快照。特别是因为分片集群元数据也需要与备份保持一致,如果你想要一个半途快速恢复。这可能会变得有点棘手。为了确保你的数据是一致的,你需要断开所有 mongos
,停止平衡器,将数据 fsync 到每个节点上的文件,制作快照,再次启动平衡器并重新启动所有 mongos
.要正确 同步,您需要在每次备份时维护 window 几分钟。
请注意,对于简单的副本集,不需要同步并且备份工作完美。
过度配置
文件系统快照与所谓的 "Copy-On-Write" (CoW) 一起工作。有点简化:当您制作快照并修改文件时,它会被复制并将更改应用于新复制的文件。然而,快照指向旧文件。很明显,为了能够根据 CoW 制作快照,您需要一些额外的磁盘 space 以便 MongoDB 可以在您处理快照时工作。让我们假设一个最坏的情况,其中所有数据都发生了变化——您需要为 MongoDB 超额配置您的分区至少 100% 的数据大小,或者换句话说,您的关键磁盘利用率将是 50% 减去您需要扩展的时间的某个阈值。当然,这有点夸张,但你明白了。
结论
恕我直言,应该以这种方式进行正确的备份:
- mongorestore 用于廉价数据且不太关心一致性
- 副本集的文件系统快照
- 具有低到中等波动性的中小型分片数据库的云备份
- 大型数据库或具有不成比例的高波动性的中小型数据库的 Ops Manager 备份
如前所述:"properly" 在备份方面是一个非常主观的术语。 ;)
我尝试备份本地 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。 我没有设置任何 username/password
如何正确使用 mongodump 来备份我的本地数据库?
这似乎是 mongodump
工具中的一个错误,有关详细信息,请参阅此 JIRA 票证。如果您明确指定 IP 地址,您应该可以使用 mongodump
:
mongo --host 127.0.0.1 --port 27017
"Properly" 在这种情况下是一个非常主观的术语。给你个印象:
mongodump 和 mongorestore 并不是非常快。在分片环境中,对于合理大小的数据库,他们可以花费 days(注意复数!)。这反过来意味着在最坏的情况下,您可能会丢失数天的数据。此外,在备份过程中,数据可能会发生很大变化,因此您的备份状态可能会不一致。这方面还是把mongodump想成"mongodumb"比较好。 您的应用程序必须能够优雅地处理缺乏一致性的问题,这在开发过程中可能会让人头疼。此外,较长的恢复时间会耗费金钱和(有时甚至更重要的)声誉。
我个人只在两种情况下使用 mongodump:备份分片集群元数据(大小只有几 MB)和(相对)便宜的数据,很容易通过其他方式重新获得。
为了正确地进行 MongoDB 备份,恕我直言,只有三个选择:
- MongoDB公司的云备份,
- MongoDB 运营经理
- 文件系统快照
Cloud backup
它有几个优点。您可以进行时间点恢复,保证数据库处于与所选时间点一致的状态。它非常容易设置和维护。 但是,您猜对了,它带有基于数据波动性和整体大小的价格标签,恕我直言,这对于具有低到中等波动性的中小型数据是合理的。
MongoDB Ops Manager
作为云备份的本地版本(它还有很多超出此答案范围的其他功能),它提供了相同的好处。它更适合中等规模到大型数据库或具有不成比例的高波动性的数据库(与数据大小相比,"OplogGb/h" 值较高)。
文件系统快照
嗯,有点便宜。只需制作一个快照,安装它,将其复制到某个备份 space,卸载并销毁快照,可选择压缩复制的数据,您就完成了。不过有一些注意事项。
同步
要获得一致数据的备份,您需要在分片集群上同步您的快照。特别是因为分片集群元数据也需要与备份保持一致,如果你想要一个半途快速恢复。这可能会变得有点棘手。为了确保你的数据是一致的,你需要断开所有 mongos
,停止平衡器,将数据 fsync 到每个节点上的文件,制作快照,再次启动平衡器并重新启动所有 mongos
.要正确 同步,您需要在每次备份时维护 window 几分钟。
请注意,对于简单的副本集,不需要同步并且备份工作完美。
过度配置
文件系统快照与所谓的 "Copy-On-Write" (CoW) 一起工作。有点简化:当您制作快照并修改文件时,它会被复制并将更改应用于新复制的文件。然而,快照指向旧文件。很明显,为了能够根据 CoW 制作快照,您需要一些额外的磁盘 space 以便 MongoDB 可以在您处理快照时工作。让我们假设一个最坏的情况,其中所有数据都发生了变化——您需要为 MongoDB 超额配置您的分区至少 100% 的数据大小,或者换句话说,您的关键磁盘利用率将是 50% 减去您需要扩展的时间的某个阈值。当然,这有点夸张,但你明白了。
结论
恕我直言,应该以这种方式进行正确的备份:
- mongorestore 用于廉价数据且不太关心一致性
- 副本集的文件系统快照
- 具有低到中等波动性的中小型分片数据库的云备份
- 大型数据库或具有不成比例的高波动性的中小型数据库的 Ops Manager 备份
如前所述:"properly" 在备份方面是一个非常主观的术语。 ;)