我正在从转储文件恢复 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/