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


12

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

有没有我不知道的干净操作,为了将数据库与磁盘上的数据库文件同步,必须执行该操作?

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

Answers:


19

与大多数数据库系统一样,删除数据时数据库文件不会收缩,只是将数据删除/标记为已删除,然后重新使用空间。

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


2
硬盘空间太小,无法做到这一点。不过我解决了这个办法:mongodumpoldDatabase.dropDatabase()mongorestore --db newDatabase dump/oldDatabase
tunnuz 2011年

5

尽管从技术角度来看,上述mongodump / drop / mongorestore方法可以很好地工作,但它要求您在使数据库脱机的同时将其脱机,这将影响服务。

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

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

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.