mongodb磁盘空间过大

mongodb磁盘空间过大,mongodb,Mongodb,我的mongodb使用114g,占我磁盘的85% 尝试使用db.repairDatabase()释放一些空间将失败,因为我没有足够的可用空间 我知道我的数据不应该占用太多空间,因为我以前有一个占磁盘90%的大集合 然后我删除了这个集合,只重新插入了其中20%的数据 如何释放一些空间?用于数据存储的磁盘空间由MongoDB提供,只能通过使用新的预分配文件重建数据库来回收。通常,这是通过db.repairDatabase()或备份与还原来完成的。正如您所注意到的,修复需要足够的空间来创建数据库的新副

我的mongodb使用114g,占我磁盘的85%

尝试使用
db.repairDatabase()
释放一些空间将失败,因为我没有足够的可用空间

我知道我的数据不应该占用太多空间,因为我以前有一个占磁盘90%的大集合

然后我删除了这个集合,只重新插入了其中20%的数据


如何释放一些空间?

用于数据存储的磁盘空间由MongoDB提供,只能通过使用新的预分配文件重建数据库来回收。通常,这是通过
db.repairDatabase()
或备份与还原来完成的。正如您所注意到的,修复需要足够的空间来创建数据库的新副本,因此可能不是一个选项

以下是一些可能的解决方案,但都涉及到在其他地方提供一些可用空间:

  • 如果该数据库有足够的可用空间,则可以
    mongodump
    、drop和
    mongorestore
    删除它
    db.dropDatabase()
    将删除磁盘上的数据文件

  • 如果您使用的是卷管理器(如或),则可以向逻辑卷添加额外的磁盘空间,以便修复或转储并恢复数据库

  • 如果您有另一台服务器,则可以设置一台服务器来同步数据,而无需关闭当前服务器(该服务器将是副本集中的“主服务器”)。一旦数据同步到辅助服务器,您就可以关闭原始主服务器并重新同步数据库

请注意,对于副本集,您至少需要三个节点。。所以要么三个数据节点,要么两个数据节点加一个。在生产环境中,仲裁器通常会在第三台服务器上运行,因此如果当前主服务器不可用,它可以允许任何一个数据节点成为主服务器。在回收磁盘空间的场景中,可以在其中一台服务器(可能是新服务器)上运行仲裁器


副本集通常非常有助于管理,因为它们允许您关闭服务器进行维护(例如运行数据库压缩或修复),同时仍有一台服务器可供应用程序使用。它们还有其他好处,例如维护数据的冗余副本以进行自动故障切换/恢复。

您是否有一个具有合理空间的单独磁盘?此数据仅用于测试,因此我并不真正担心恢复数据。我只是不知道是否有任何方法可以降低磁盘消耗,即使在db.repairDatabase()失败的情况下也是如此。谢谢你详细的回答