1. 監控磁盤空間使用情況
在解決問題前,需先明確磁盤空間占用狀態。使用df -h命令查看Ubuntu系統各分區的磁盤使用情況,定位MongoDB數據目錄(默認為/var/lib/mongodb)所在分區;通過mongostat、mongotop或MongoDB Compass、Prometheus+Grafana等工具監控數據庫的實時存儲占用、操作計數器及性能指標,快速識別空間消耗過快的集合或操作。
2. 清理無用數據與日志
db.dropCollection('collectionName')刪除指定集合,db.dropDatabase()刪除整個數據庫(操作前需備份重要數據)。/var/log/mongodb/mongod.log)會持續增長,使用sudo journalctl --vacuum-time=1w清理1周前的系統日志,或手動刪除舊日志文件(如sudo rm -rf /var/log/mongodb/*.log),釋放日志占用的空間。3. 碎片整理與空間回收
MongoDB刪除數據后,空間不會自動返還給操作系統,需通過以下命令整理碎片:
use yourDatabase; db.runCommand({ compact: 'yourCollection' })。注意:執行前需備份數據,且會阻塞該集合的讀寫操作。mongod實例停止狀態下執行(sudo systemctl stop mongod),或在mongo shell中運行db.repairDatabase()。dbpath下的所有文件,用rs.remove('secondaryIP:port')將其從副本集移除,再用rs.add('secondaryIP:port')重新加入,等待同步完成。4. 擴展存儲容量
/dev/mapper/ubuntu--vg-mongodb-lv),可使用lvextend擴展邏輯卷大小,再調整文件系統(如resize2fs)。示例:sudo lvextend -L +100G /dev/mapper/ubuntu--vg-mongodb-lv(增加100G),sudo resize2fs /dev/mapper/ubuntu--vg-mongodb-lv。/dev/sdb),格式化并掛載到MongoDB數據目錄(如/var/lib/mongodb)。步驟:sudo mkfs.ext4 /dev/sdb,sudo mkdir /mnt/newdata,sudo mount /dev/sdb /mnt/newdata,修改/etc/fstab實現開機自動掛載,最后將MongoDB數據目錄遷移至新硬盤。5. 優化存儲配置
/etc/mongod.conf中添加:storage: engine: wiredTiger wiredTiger: collectionConfig: blockCompressor: snappy,重啟服務生效(sudo systemctl restart mongod)。db.logs.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 86400 }),表示數據1天后自動刪除)。db.collection.getIndexes()查看現有索引,刪除未使用或重復的索引(db.collection.dropIndex('indexName'))。6. 數據遷移與備份
mongodump備份數據到外部存儲(如NFS、云存儲),再刪除本地舊數據。示例:mongodump --out /mnt/backup/mongodb-$(date +%F),備份完成后可刪除本地部分歷史數據。/etc/mongod.conf中的dbPath指向外部目錄(如dbPath: /mnt/nfs/mongodb),重啟服務即可將數據存儲到外部設備。