【MongoDB】釋放占用的系統空間

在CentOS 的MongoDB 刪掉檔案之後,還是會占用原本硬碟的空間。所以需要下特殊指令把空間釋放。

MongoDB 刪掉檔案之後,還是會占用原本硬碟的空間。

用 df /var/lib/mongo 可以看到目前的使用量。可以看到原本是 3484200,Insert 之後變成 6626960,刪除檔案之後是6627988,空間沒有變少。
 

如果資料庫有開啟驗證機制,需要權限才能下指令清除。為了排除這個問題,需要給予現有使用者足夠的權限,如此該使用者才能在驗證機制開啟的狀態下,釋放資料庫空間。若沒有開啟驗證機制,可以直接跳到操作步驟 3。

1. 先輸入指令,指定到admin 資料庫:use admin

2. 假設使用者名稱為:user,參考下面指令
給予現有的使用者root 權限 
db.grantRolesToUser("user", [ {“role”:”root", “db”:”admin”} ] );
移除權限
db.revokeRolesFromUser("user", [ {“role”:”root", “db”:”admin”} ] );

3. 指定到要清除的資料庫:use <資料庫的名稱>

4. 指定要清除的集合:db.runCommand({ compact: '<集合名稱>'});
以上指令可以清除指定集合,如果要全面性的清除可以使用以下指令:

db.getCollectionNames().forEach(function (collectionName) {
   print('Compacting: ' + collectionName);
   db.runCommand({ compact: collectionName });
   print('Compacting: ' + collectionName + ', completed');
});

下指令之後,就變成4771512,空間的確被釋放掉了

References:
https://www.mongodb.com/docs/manual/reference/command/compact/
https://stackoverflow.com/questions/2966687/reducing-mongodb-database-file-size
https://www.796t.com/article.php?id=348963