首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于大于ram的集合的mongodump

用于大于ram的集合的mongodump
EN

Stack Overflow用户
提问于 2019-04-23 09:22:42
回答 3查看 2.4K关注 0票数 0

我使用这样的命令从远程机器转储数据:

代码语言:javascript
复制
mongodump --verbose \
          --uri="mongodb://mongousr:somepassword@host.domain.com:27017/somedb?authSource=admin" \
          --out="$BACKUP_PATH"

它失败了,如下所示:

代码语言:javascript
复制
Failed: error writing data for collection `somedb.someCollection` to disk: error reading collection: EOF

somedb.someCollection大约为40 is。我没有能力将RAM增加到这个大小。

我看到了两种解释。一个原因是控制台输出过于冗长,会占用RAM。这看起来很荒谬,它只有几千字节,而且无论如何它都在客户机上。Rejected (但我现在正在用--quiet再次尝试,只是为了确保)。

更合理的解释是,主机用somedb.someCollection数据填充了内存,然后出现了故障。问题是,我所看到的“解决方案”是增加RAM,使之大于集合的大小。

真的?这是不对的。有了这个限制,mongodump有什么意义呢?

问题:有没有可能用比我的RAM大小更大的集合来对数据库进行mongodump?多么?

mongodump客户端:

代码语言:javascript
复制
macOS
mongodump --version
mongodump version: 4.0.3
git version: homebrew
Go version: go1.11.4
   os: darwin
   arch: amd64
   compiler: gc
OpenSSL version: OpenSSL 1.0.2r  26 Feb 2019

服务器:

代码语言:javascript
复制
built with docker FROM mongo:
Reports: MongoDB server version: 4.0.8
EN

回答 3

Stack Overflow用户

发布于 2019-04-23 16:56:51

只需一片一片地转储您的集合:

代码语言:javascript
复制
mongodump --verbose \
          --uri="mongodb://mongousr:somepassword@host.domain.com:27017/somedb?authSource=admin" \
          --out="$BACKUP_PATH" -q '{_id: {$gte: ObjectId("40ad7bce1a3e827d690385ec")}}'

mongodump --verbose \
          --uri="mongodb://mongousr:somepassword@host.domain.com:27017/somedb?authSource=admin" \
          --out="$BACKUP_PATH" -q '{_id: {$lt: ObjectId("40ad7bce1a3e827d690385ec")}}'

或者通过在_id上设置不同的查询或某个不同的字段对转储进行分区。报道的_id只是一个例子。

票数 3
EN

Stack Overflow用户

发布于 2019-06-13 20:48:30

Stennie的回答真的很有效。

storage.wiredTiger.engineConfig.cacheSizeGB的默认值为max((RAM-1GB)/2, 256MB)。如果您的mongodb服务器运行在默认配置的docker容器中,并且主机上还有其他应用程序在运行,那么当您转储大型集合时,内存可能会被填满。如果容器的RAM由于您的配置而受到限制,也会发生同样的事情。

您可以使用docker run --name some-mongo -d mongo --wiredTigerCacheSizeGB 1.5 (数量取决于您的情况)。

票数 2
EN

Stack Overflow用户

发布于 2020-04-09 15:43:42

另一种可能是将压缩标志添加到mongodump的输出中。它帮助我备份了一个在没有压缩的情况下挂起了48%的数据库。所以语法应该是:

代码语言:javascript
复制
mongodump --uri="mongodb://mongousr:somepassword@host.domain.com:27017/somedbauthSource=admin"  --gzip --out="$BACKUP_PATH"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55803060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档