一 说明
由于mongo版本众多,所以本文说明会进行分类汇总
二 版本
1 <3.2版本 官方版本 : repairDatabase确认并修复数据存储中的错误和不一致的地方,类似于linux下的文件操作命令fsck 。当数据库被意外重启或破坏时,使用repairDatabase命令来确保数据完整。
实际操作:压缩数据库中所有的collections,等同于分别在每个collection上进行compact命令。减少了磁盘中数据文件的总大小,并且重建了数据库中的所有索引。
需求 repairDatabase操作所需要磁盘的空余空间为当前数据总量再加上2G。如果当前磁盘分区空间不足,可以尝试用 –repairpath 参数指定一个空间足够的分区路径。
风险 : Repair过程中,其他所有操作都无法执行,直到修复完成。
语句命令 db.runCommand({repairDatabase :1})
2 3.2版本 新的命令compact
语句命令 db.tablename.runCommand("compact");
风险 加集合所在DB的互斥写锁,会导致该DB上所有的读写请求都阻塞 执行的时间可能很长,跟集合的数据量相关,所以强烈建议在业务低峰期执行,避免影响业务。 适用于 WiredTiger 引擎
三 其他方式
1 如果只是主本身有问题,可以调整优先级,将主变成从 将从变成主 重新进行同步
2 可以采用dump restore方式