分類:
查看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!
原理是:把數據重新讀一遍,然后寫到另一個庫中
