gpt4 book ai didi

mongodb磁盘空间过大

转载 作者:可可西里 更新时间:2023-11-01 09:08:30 25 4
gpt4 key购买 nike

我的 mongodb 占用了 114g,这是我磁盘的 85%

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

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

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

我怎样才能释放一些空间?

最佳答案

数据存储的磁盘空间为preallocated由 MongoDB 回收,并且只能通过使用新的预分配文件重建数据库来回收。通常这是通过 db.repairDatabase() 或备份和恢复来完成的。正如您所指出的,修复需要足够的空间来创建数据库的新副本,因此可能不是一种选择。

这里有一些可能的解决方案,但都涉及在其他地方提供一些可用空间:

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

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

  • 如果您有另一台服务器,您可以设置一个 replica set在不关闭当前服务器(这将是副本集中的“主要”)的情况下同步数据。一旦数据同步到辅助服务器,您就可以降级原始主服务器并重新同步数据库。

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

副本集通常对管理目的非常有用,因为它们允许您停止服务器进行维护(例如运行数据库压缩或修复),同时仍然有一个服务器可用于您的应用程序。它们还有其他好处,例如维护数据的冗余副本以实现自动故障转移/恢复。

关于mongodb磁盘空间过大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12018002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com