为什么删除 110+ GB 的集合后,我的 /var/lib/mongodb 目录仍然具有相同的大小?

tun*_*nuz 13 disk-space-utilization mongodb

我在 MongoDB 和空间使用方面遇到了一些麻烦。特别是,我曾经在磁盘上收集了大约 6 亿条记录,总计 110+ GB。最近我决定放弃它,因为数据已经过时了,为此我通过 Rockmongo 的 Web 界面放弃了收藏。因此,rockmongo 不再向我显示该集合,但是我的磁盘使用情况根本没有改变。

是否有任何我不知道的清理操作,必须运行这些操作才能将数据库与磁盘上的数据库文件同步?

我试图执行“修复”,但系统抱怨磁盘空间不足……那是因为它都被 MongoDB 使用了。

nos*_*nos 20

与大多数数据库系统一样,删除数据时数据库文件不会缩小,数据只是被删除/标记为已删除,并且空间被重用。

您需要db.repairDatabase()按照此处所述运行到紧凑空间

  • 硬盘空间太小而无法做到这一点。但是我是这样解决的:`mongodump`、`oldDatabase.dropDatabase()`、`mongorestore --db newDatabase dump/oldDatabase`。 (2认同)

小智 6

虽然从技术角度来看,上述 mongodump/drop/mongorestore 方法可以正常工作,但它需要您在执行此操作时使数据库脱机,这将是一个影响服务的事件。

如果您想在不停机的情况下执行此操作,并且您正在使用 MongoDB 副本集 [1],则可以这样做:

  1. 选择一个成员并在那里停止 MongoDB(service mongodb stop)。如果这是 PRIMARY,则等待另一个成员被选为 PRIMARY。
  2. 删除此成员上的数据文件 (cd /var/lib/mongodb; rm *)。
  3. 再次重启MongoDB服务(service mongodb start)。
  4. 等待成员重新同步到 PRIMARY (rs.status())。
  5. 这将仅重建所需的(较小的)数据文件。

然后对副本集中的其他每个成员重复上述步骤。

[1] https://docs.mongodb.org/manual/tutorial/deploy-replica-set )