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

我在MongoDB和空间使用方面遇到一些麻烦。 特别是我曾经有过大量的6亿条logging,总共有110多GB的磁盘。 最近我决定放弃它,因为数据已经过时了,所以我通过rockmongo的Web界面删除了这个集合。 因此,rockmongo不再显示我的集合,但是我的磁盘使用率根本没有改变。

有没有清理操作,我不知道,必须运行,以便同步数据库与磁盘上的数据库文件?

我试图执行“修复”,但系统抱怨磁盘上没有足够的空间…这是因为它全部由MongoDB使用。

与大多数数据库系统一样,当您删除数据时,数据库文件不会收缩,只会删除/标记为已删除的数据,并重新使用该空间。

您将需要运行db.repairDatabase()来压缩空间,如此处所述

虽然上面的mongodump / drop / mongorestore方法从技术angular度来说可以很好地工作,但是这样做会要求您在数据库脱机的同时将数据库置于脱机状态,这将是一个影响服务的事件。

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

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

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

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

根据这个常见问题https://docs.mongodb.com/manual/faq/storage/#faq-disk-size

唯一的办法是做以下几点:

  • 设置新鲜和空副本
  • 与主同步
  • 设置为主