1. 清理不必要的数据
删除不再需要的数据是释放磁盘空间的基础操作。可以使用以下命令针对性清理:
db.collection.drop()(彻底移除集合及其中所有文档);db.collection.remove({ "status": "inactive" })(按条件删除文档,如删除状态为“inactive”的数据);db.dropDatabase()(移除整个数据库,需谨慎使用)。2. 压缩数据以回收空间
压缩是减少磁盘占用的关键手段,适用于已删除数据后的空间回收:
use your_database; db.runCommand({ compact: "collection_name" })。需注意,compact会将集合置于RECOVERING状态,阻塞读写,建议在secondary节点执行。use admin; db.runCommand({ repairDatabase: 1 })。需确保有双倍磁盘空间(原数据大小+2G),且操作会阻塞整个数据库。mongodump --db your_db --out /backup_path(导出数据);mongo --eval "db.dropDatabase()"(删除原数据库);mongorestore /backup_path/your_db(恢复数据)。3. 优化存储引擎配置
MongoDB默认使用WiredTiger存储引擎(推荐),其内置压缩机制可有效减少空间占用。可通过修改配置文件(/etc/mongod.conf)调整压缩级别和缓存大小:
storage.wiredTiger.engineConfig下设置compression: "snappy"(默认,平衡速度与压缩比)或"zstd"(更高压缩比,但消耗更多CPU);storage.wiredTiger.engineConfig.cacheSizeGB(如2,根据服务器内存调整,建议为物理内存的50%-70%),控制WiredTiger使用的内存,避免过度占用磁盘。4. 数据建模与索引优化
合理的数据模型和索引设计可减少存储消耗:
db.collection.createIndex({ "user_id": 1 })),但避免过度索引(每个索引会占用额外空间)。定期使用db.collection.stats()分析索引使用情况,删除未使用的索引。5. 监控与自动扩容
df -h命令查看磁盘使用情况(如df -h /data/db,MongoDB默认数据目录),设置阈值(如10%),当空间不足时及时处理;rs.add("new_node_ip:27017")),数据会自动同步到新节点,分散存储压力;6. 日志与临时文件管理
定期清理MongoDB生成的日志文件(如mongod.log),避免日志占用过多空间:
logrotate工具配置日志轮转(编辑/etc/logrotate.d/mongodb,设置size 100M(日志文件达到100M时轮转)和keep 7(保留7个旧日志));/tmp目录下的MongoDB临时文件),可使用rm -rf /tmp/mongodb-*命令(谨慎操作,避免删除正在使用的文件)。