【问题标题】:Catch-22: mongo can't repair database because there isn't enough disk space?Catch-22:mongo 无法修复数据库,因为没有足够的磁盘空间?
【发布时间】:2015-03-10 11:37:56
【问题描述】:

我正在从转储文件中恢复 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-query database nosql


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果可能,您可以创建一个副本集,复制成员将回收空闲空间。

      然后您可以退出您的主节点,停止 mongod,并删除数据文件。

      再次启动 mongod 时,此服务器将从新服务器复制数据,并具有更小的文件大小(或考虑到您的数据,至少尽可能小)。

      【讨论】:

        猜你喜欢
        • 2016-09-21
        • 1970-01-01
        • 2017-08-07
        • 2012-11-15
        • 2014-09-27
        • 2014-08-21
        • 1970-01-01
        • 2017-03-31
        • 1970-01-01
        相关资源
        最近更新 更多