删除MongoDB数据库和集合

3

我在mongoDB和我的当前ubuntu 12.04桌面电脑上遇到空间问题。我一直使用默认设置,也就是数据物理存储在/var/lib/mongodb下。随着时间推移,数据库大小增长得非常快,现在我想删除一些集合以释放硬盘上的一些空间。我查看了此链接和其他方法,但每当我运行remove函数时,都会收到以下错误消息:

Can't take a write lock while out of disk space

我首先想到的解决方案是将MongoDB的路径设置到外置硬盘或USB磁盘上,并使用rm -rf物理上删除该文件夹。这是否是一个安全的解决方案?还有其他解决此问题的方法吗?


你应该先将数据文件复制到外部磁盘,否则会删除所有数据 :) 但是,原则上,这可以解决问题。有更多的磁盘空间可用后,您可以选择性地删除数据并使用压缩。或者,您可以尝试在外部磁盘上进行mongodump,删除不需要的集合文件,删除数据文件,然后重新导入数据。不用说,一定要备份。 - mnemosyn
你也可以尝试删除硬盘驱动器上的其他文件,以便Mongo获得更多空间并能够执行删除操作。 - xlembouras
1个回答

3

Mongodb非常适合复制数据库,因为你只需要将完整的数据目录复制到其他位置,然后只需将一个新的mongod进程指向它,它就可以工作。

因此,您需要执行以下步骤:

  • Find the current data directory
  • Copy this to another location
  • Delete any file that has .lock in the directory (this stops Mongo from loading up again)
  • Now start up another mongo with the following command:

    mongod --dbpath <path to new directory on new disk> --port 27020
    

现在,这将打开一个新的Mongo数据库(但是在不同的端口上,以避免与可能已经运行的mongod出现任何问题)。现在,您将拥有一个针对新磁盘运行的新mongod,而无需删除集合或数据库。请记住,Mongodb很贪婪,当您删除集合时,不会自动释放磁盘空间。您需要运行

 db.repairDatabase()

一旦您满意,您可以安全地删除旧的mongodb数据目录,然后将新的目录复制到原来的位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接