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),重启服务即可将数据存储到外部设备。