如何在没有`db.repairDatabase()`的情况下回收已删除的空间?

use*_*627 12 mongodb

我想通过回收已删除的空间来缩小数据文件大小,但我无法运行db.repairDatabase(),因为可用磁盘空间不够.

Gat*_* VP 12

更新:使用WiredTiger,可以腾出空间.compact

这个问题的原始答案在这里: 减少MongoDB数据库文件的大小

除此之外什么也没有什么repair可以收回空间.本compact应该让你更长的时间去对现有的空间.否则,您将不得不迁移到更大的驱动器.

一种方法是使用副本集中的脱机辅助节点.这应该为您提供整个维护窗口,以便迁移,修复,后退和恢复.

如果您没有运行副本集,则应该考虑这样做.


Eko*_*tin 11

您可以compact在单个集合上运行该命令,也可以在要缩小的所有集合中逐个运行该命令.

http://www.mongodb.org/display/DOCS/Compact+Command

db.runCommand( { compact : 'mycollectionname' } )
Run Code Online (Sandbox Code Playgroud)

正如评论中所指出的,我错了,compact实际上并没有回收磁盘空间,它只对碎片整理和重建集合索引进行碎片整理.

相反,如果您有另一个可用的可用空间驱动器,则可以使用"--repairpath"选项.

例如:

mongod --dbpath /data/db --repair --repairpath /data/db0
Run Code Online (Sandbox Code Playgroud)

如下所示:http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/


udo*_*udo 11

您也可以手动mongodump和mongorestore.这与repairDatabase的功能基本相同.这样,您就可以将磁盘空间转储到具有足够磁盘空间的其他计

  • 这个.确保在恢复数据库之前首先删除数据库,以回收空间.当然这个选项意味着一点停机时间,但这就是3AM的用途! (7认同)