mongoDB 删除集合后,空间不释放,添加新集合,没有重新利用之前删除集合所空出来的空间,也就是数据库大小只增不减。

方法有:

1、导出导入 dump & restore

2、修复数据库 repair database

3、复制数据库 db.copyDatabase(“from”,”to”,”127.0.0.1:27017”);

4、重新同步复制集

方法一:导出导入 dump & restore

所需时间根据数据库实际大小而定,如果数据量不大,dump不需要太长时间的情况下,或者经常备份有dump文件的情况下,这种方法很简单。

备份

#Mongodump –h IPAddress --port 27017 –d DatabaseName –u UserName –p Password –authenticationDatabase admin –o backup_dir

恢复

#Mongorestore –h IPAddress --port 27017 –d DatabaseName –u UserName –p Password –authenticationDatabase admin backup_dir

方法二:修复数据库 repair database

  需要停机,即便你不停机的话 mongodb 自己也会锁住直到 repair 完成。注意要有足够的磁盘空间,需要额外一倍的空间,如果mongodb 占用了100G,那么 repair 时还需要额外的100G+2G 空间。可以追加磁盘,然后将目标目录指向新加的磁盘。

我理解到官网的意思是,在确认修复过程不中断并且有足够的空闲空间的前提下,那么这个repair database方法是回收磁盘空间唯一合适的方法(注意前提啊)。

# mongod --dbpath /data/db --repair --repairpath /data/db0

如果当前磁盘足够的话可直接在 mongo 命令行中运行:

>  db.repairDatabase()

或者

> db.runCommand({ repairDatabase: 1 })

第二种方法可以带其他几个参数

{ repairDatabase: 1,

preserveClonedFilesOnFailure: <boolean>,

backupOriginalFiles: <boolean> }

只要磁盘空间够基本上没什么问题。

这种方法有两个不好的地方。1.在生产上操作如果意外停止可能会造成数据无法恢复的危险。2.如果磁盘空间不足,小于现在这个db时间占有的空间,这种情况是用不了    db.repairDatabase()的。

方法三:复制数据库 db.copydatabase

1.db.copyDatabase("from","to","127.0.0.1:27017");复制出一个新的to数据库。这个已经是最小数据占用的数据。会在数据目录下产生to的相关数据文件。127.0.0.1:27017是from的数据库所在的地址和端口号。

2.将所有程序的配置从from库改为to库。

3删除from库。

>use from

> db.dropDatabase()

这个方法的好处是可以时间将磁盘上的数据删除掉。节省出很大的空间。

方法四:重新同步复制集

  还没整理好,后续再补充。

  最后,附上官网对于这个问题解决方法的链接:https://docs.mongodb.com/v2.6/faq/storage/#how-do-i-reclaim-disk-space

mongoDB 删除集合后,空间不释放的解决方法的更多相关文章

  1. linux 删除文件后空间没有释放的解决办法

    清空没用的文件,当我删除文件后,发现可用空间沒有变化 os:centos4.7 现象: 发现当前磁盘空间使用情况: [root@ticketb ~]# df -hFilesystem          ...

  2. mongoDB 删除集合后,空间不释放

    mongoDB 删除集合后,空间不释放,添加新集合,没有重新利用之前删除集合所空出来的空间,也就是数据库大小只增不减. 方法有: 1.导出导入 dump & restore 2.修复数据库 r ...

  3. 关于mongodb删除集合后磁盘空间不释放的问题

    mongodb删除集合后磁盘空间不释放,只有用db.repairDatabase()去修复才能释放. 但是在修复的过程中如果出现了非正常的mongodb的挂掉,再次启动时启动不了的,需要先修复才可以, ...

  4. Linux 删除文件后空间不释放【原创】

    删除MySQL备份文件后,查找文件所在目录发现文件已经备删除了,但是空间没有释放,还是83% 解决方法: lsof|grep -i delete 发现进程还在,杀掉进程 kill -9 5377 再次 ...

  5. 解决linux删除文件后空间没有释放问题

    linux删除文件后沒有释放空间 今天发现一台服务器的home空间满了,于是要清空没用的文件,当我删除文件后,发现可用空间沒有变化 os:centos4.7 现象: 发现当前磁盘空间使用情况: [ro ...

  6. Linux解决删除文件后空间没有释放问题_端口占用问题

    使用命令 (1) losf | grep deleted 查询所有已经删除但是还未释放空间的进程,找到容量最大的线程,kill -9 pid 然后等待容量释放 (2) netstat -ano | g ...

  7. Linux 删除文件后空间不释放磁盘空间

    在Linux操作系统下,有个没用的文件占用了400G,于是删除掉. [root@yoon log]# rm -rf messages [root@yoon log]# df -hFilesystem ...

  8. Linux系统下rm删除文件后空间没有释放问题解决办法

    一.问题描述 今日收到zabbix监控报警,发现生产环境一台服务器的磁盘空间不足,需要进行处理,登录后发现可利用率不足20%,进行相关查看和处理工作:但是操作删除了一些备份文件和日志信息后,查看空间仍 ...

  9. Linux删除文件后空间不释放

    最近线上 elasticsearch 由于磁盘空间不足报错,于是乎对磁盘进行了分析,删除了一些 Tomcat 日志文件,但是删除后发现并没有磁盘空间释放.于是 google 了一下. 原来在Linux ...

随机推荐

  1. node.js 核心http模块,起一个服务器,返回一个页面

    let http=require("http"); //引入核心http模块 let fs=require("fs"); let mime={ '.js':'a ...

  2. 母函数(Generating function)详解

    母函数(Generating function)详解 在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息.使用 ...

  3. Prim算法和Dijkstra算法的异同

    Prim算法和Dijkstra算法的异同 之前一直觉得Prim和Dijkstra很相似,但是没有仔细对比: 今天看了下,主要有以下几点: 1: Prim是计算最小生成树的算法,比如为N个村庄修路,怎么 ...

  4. [bzoj1613][Usaco2008 Jan]Running贝茜的晨练计划_动态规划

    Running贝茜的晨练计划 bzoj-1613 Usaco-2008 Jan 题目大意:题目链接(U组题题意真的是没法概括qwq....). 注释:略. 想法:一眼dp题. 状态:dp[i][j]表 ...

  5. url处理函数

    function UrlOption(url) { this.url = url || ''; this.init(); this.change = function (url) { this.url ...

  6. ZFS

    zfs是128bit文件系统,那么为什么容量是2^64byte? 不应该是2^128 / 2^3=2^125 byte吗 文件系统不再局限于单独的物理设备,而且文件系统还允许物理设备把他们自带的那些文 ...

  7. Install nginx-clojure on CentOS 7

    Install nginx-clojure on CentOS 7 1. install open-jdk-7 sudo yum install java-1.7.0-openjdk-devel 2. ...

  8. V Server Ubuntu

    Ubuntu下代理伺服器通常使用squid 安裝 sudo apt-get install squid 修改squid.conf配置 sudo vim /etc/squid/squid.conf 公司 ...

  9. HDU 4849 Wow! Such City!陕西邀请赛C(最短路)

    HDU 4849 Wow! Such City! 题目链接 题意:依照题目中的公式构造出临接矩阵后.求出1到2 - n最短路%M的最小值 思路:就依据题目中方法构造矩阵,然后写一个dijkstra,利 ...

  10. android 通过子线程跳转activity并传递内容

    android 子线程中不能够更新ui已经根深蒂固在我的脑海里,当时也就理所当然的觉得子线程中也是不能够进行界面的跳转的,可是在后来的学习中,发现居然是能够通过子线程来进行activity的跳转时,立 ...