mongodb - 第二十二条军规 : mongo can't repair database because there isn't enough disk space?

标签 mongodb mongodb-query database nosql

我正在从转储文件恢复 Mongo 数据库时遇到问题。我无法修复数据库,因为没有足够的可用空间,现在我被卡住了。

所以我导入了 1000 万行,现在我想在集合上创建索引。但是当我尝试创建索引时,Mongo 出现错误 - 没有足够的可用内存。

所以我决定删除一半的行,然后回收空闲空间:

> for (var v = db.page_statistics.find().sort({_id:1}).limit(5000000);v.hasNext();) { 
    db.page_statistics.remove(v.next()); 
}
> db.govuk_info_page_statistics.count();
5828632 # this worked, only 5 milion rows left

接下来我尝试运行数据库修复以回收可用空间:

> db.repairDatabase();
{
    "ok" : 0,
    "errmsg" : "Cannot repair database backdrop having size: 19268632576 (bytes) because free disk space is: 9958019072 (bytes)"
}

我能做什么?如果不运行数据库修复,我无法回收足够的磁盘空间来创建索引,但我也没有足够的磁盘空间来运行修复,所以我陷入了第 22 条军规。

最佳答案

为了修复数据库,您的磁盘空间应该是现有数据库的两倍。 在修复数据库操作中,mongodb 修复数据文件并将修复的文件保存在另一个位置,即它创建现有数据文件的副本。因此,如果没有足够的磁盘空间,您将无法修复数据库。

关于mongodb - 第二十二条军规 : mongo can't repair database because there isn't enough disk space?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27906484/

相关文章:

node.js - mongoosejs 不带循环获取 _doc

mongodb - 如何在 map-reduce 数据库中实现引用?

node.js - Mongoose 对日期条件的查询没有结果,MongoDB Shell 有效

php - 获取每个用户的最新 N 个帖子

node.js - meteor 方法不起作用

c# - 在 MongoDB 集合中获取前 10 个结果

mongodb - Mongo 查询更新字段并修改当前列中的数据

Mongodb聚合(月)查询将 "missing fields"设置为零

mysql - SQL查询以检索最接近时间戳的记录

php - 对所有用户使用相同的 MySQL 链接?