mongoDB数据库的修复
![](http://static.blog.csdn.net/images/category_icon.jpg)
查看mongodb.log日志,发现日志里有以下语句:
..............
Mon Mar 317:46:37 [conn148] Assertion: 10295:getFile(): bad file number value (corrupt db?): run repair
查了查mongodb的文档,遂用以下方法进程修复:
首先停止mongod服务,删除 mongodb.log,也可以备份一下
# rm -rf /data/mongodb/mongodb.log
删除mongodb进程文件
# rm -rf /mongodb/mongod.lock
进行修复
这时mongodb进程会在/mongodb/repair/ 目录下储存临时的修复数据库文件,文件目录为“$tmp_repairDatabase_0”所以此目录空间要足够大。
生产环境数据库为100G,修复进行了大约3个半小时,在“/mongodb/repair/$tmp_repairDatabase_0"目录下产生了近30G的数据库临时文件,修复完成后数据库临时文件自动清除。
..............
Mon Mar 317:46:37 [conn148] Assertion: 10295:getFile(): bad file number value (corrupt db?): run repair
..............
或
com.MongoDB.MongoException: bad offset:0 accessing file: /data/dbdata/db.0 - consider repairing database
翻译 为: 声明: getFile():错误的文件数值(损坏的数据库?):运行修复
查了查mongodb的文档,遂用以下方法进程修复:
首先停止mongod服务,删除 mongodb.log,也可以备份一下
# rm -rf /data/mongodb/mongodb.log
删除mongodb进程文件
# rm -rf /mongodb/mongod.lock
进行修复
# /usr/local/mongodb/bin/mongod --repair --dbpath /mongodb/ --repairpath /mongodb/repair/
如果后台执行
./mongod --repair --dbpath /data/dbdata --repairpath /data/repair/ --logpath /data/dblog/mongodbrepair.log --fork
这时mongodb进程会在/mongodb/repair/ 目录下储存临时的修复数据库文件,文件目录为“$tmp_repairDatabase_0”所以此目录空间要足够大。
生产环境数据库为100G,修复进行了大约3个半小时,在“/mongodb/repair/$tmp_repairDatabase_0"目录下产生了近30G的数据库临时文件,修复完成后数据库临时文件自动清除。
之后开启mongod服务,检查数据库,发现读写正常,mongodb.log没有出现错误。修复OK!
原理是:把数据重新读一遍,然后写到另一个库中
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步