MongoDB在Ubuntu上的磁盘空间管理指南
定期监控是磁盘空间管理的基础,可通过以下工具实现:
df -h查看各分区(尤其是MongoDB数据目录所在分区,如/var/lib/mongodb)的磁盘使用情况;用du -sh /var/lib/mongodb/*查看MongoDB数据目录下各子目录的大小,定位占用空间大的集合或文件。mongostat监控数据库操作的统计信息(如插入、更新、删除的频率),mongotop查看各集合的读写时间,识别高频写入的集合。MongoDB不会自动将删除数据的空间返还给操作系统,需通过以下操作手动回收:
db.dropCollection('collection_name')删除不再需要的集合;用db.dropDatabase()删除整个数据库(慎用,需提前备份)。db.repairDatabase()命令修复,回收碎片空间(需停机执行)。通过调整数据模型和配置,减少磁盘空间占用:
int32代替int64存储小整数,用string代替objectId存储短ID)。db.createCollection("logs", {storageEngine: {wiredTiger: {configString: 'compression: {snappy: true}}'}}}))。db.logs.createIndex({createdAt: 1}, {expireAfterSeconds: 86400}),表示文档1天后自动删除)。db.collection.stats()查看索引大小,删除未使用的索引。MongoDB日志文件(默认位于/var/log/mongodb/mongod.log)会持续增长,需通过以下方式控制大小:
/etc/logrotate.d/mongodb文件,添加如下配置(每天轮转、保留7份、压缩旧日志、大小超过200MB时触发轮转):/var/log/mongodb/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
maxsize 200M
}
该配置可防止日志文件无限增长,占用过多磁盘空间。/etc/mongod.conf中设置verbosity: 1(默认),减少不必要的日志输出(0为最低,5为最高)。当现有磁盘空间不足时,可通过以下方式扩展:
/data/mongodb)。步骤:① 停止MongoDB服务(sudo systemctl stop mongod);② 将原数据目录(/var/lib/mongodb)的内容复制到新目录(cp -r /var/lib/mongodb/* /data/mongodb/);③ 修改/etc/mongod.conf中的dbPath: /data/mongodb;④ 启动服务(sudo systemctl start mongod)。lvextend扩展逻辑卷大小,再用resize2fs扩展文件系统(适用于ext4/xfs文件系统)。/mnt/newdisk),修改dbPath指向新目录,或使用符号链接将原数据目录链接到新硬盘。定期备份数据并将备份存储到外部存储(如NAS、云存储),可释放主数据库的磁盘空间(备份文件通常占用与原数据相近的空间,但可删除旧备份)。使用mongodump备份,mongorestore恢复:
# 备份整个数据库
mongodump --db mydb --out /backup/mongodb/$(date +%F)
# 恢复数据库
mongorestore /backup/mongodb/2025-10-10/mydb