1. 檢查MongoDB服務狀態
使用systemctl status mongod
命令確認MongoDB服務是否正在運行。若未運行,通過sudo systemctl start mongod
啟動服務,并設置開機自啟(sudo systemctl enable mongod
)。服務未啟動是許多故障的根源,需優先排查。
2. 查看與分析日志文件
MongoDB的日志文件是故障排查的核心線索,通常位于/var/log/mongodb/mongod.log
。使用tail -f /var/log/mongodb/mongod.log
實時追蹤最新日志,重點關注ERROR(錯誤)、WARN(警告)級別的條目。例如,“連接超時”可能表現為“Connection timed out”,“權限錯誤”會提示“not authorized”,“數據庫損壞”可能出現“checksum doesn’t match”等關鍵詞。此外,可通過db.getLogComponents()
(shell內)或mloginfo
(第三方工具)進一步分析日志結構和統計信息。
3. 驗證配置文件正確性
MongoDB的配置文件默認路徑為/etc/mongod.conf
,需檢查以下關鍵配置項的正確性:
/data/db
);0.0.0.0
表示允許所有IP,生產環境建議限制為特定IP);mongod --config /etc/mongod.conf --fork
命令測試配置文件語法是否正確。4. 排查端口與網絡問題
使用netstat -anp | grep 27017
(或ss -lntp | grep 27017
)檢查MongoDB端口是否被正常監聽。若端口被占用,通過lsof -iTCP -sTCP:LISTEN -n -P | grep <端口號>
找到占用進程并終止(kill -9 <PID>
)。同時,檢查防火墻設置(如iptables
或firewalld
),確保允許MongoDB端口的流量通過(如firewall-cmd --add-port=27017/tcp --permanent
)。
5. 檢查系統資源使用情況
使用top
、htop
或free -h
命令查看系統資源使用情況:
df -h
檢查數據目錄所在磁盤的剩余空間,若空間不足(如小于10%),MongoDB可能無法寫入數據;mongostat
監控查詢性能。6. 處理權限問題
MongoDB進程需要對數據目錄、日志文件及配置文件有正確的讀寫權限。通常,將這些文件的所有者設置為運行MongoDB的用戶(如mongod
),命令如下:
sudo chown -R mongod:mongod /var/log/mongodb/
(日志目錄)
sudo chown -R mongod:mongod /data/db/
(數據目錄)
sudo chown mongod:mongod /etc/mongod.conf
(配置文件)。
若使用SELinux(如CentOS),需檢查其狀態(sestatus
),若處于enforcing
模式,可臨時設置為permissive
模式排查是否為SELinux導致的問題(sudo setenforce 0
),或通過chcon
命令修改安全上下文(如sudo chcon -Rv --type=mongod_var_lib_t /data/db
)。
7. 使用診斷工具監控性能
MongoDB自帶多種診斷工具,可實時監控實例狀態:
mongostat
);mongotop
);mongo
進入shell后執行db.serverStatus()
。8. 解決常見具體問題
_id
)是否有重復數據,可通過db.collection.find({<字段>: {$exists: true}}).count()
統計,必要時刪除重復數據;mongod.conf
中調整wiredTiger.engineConfig.cacheSizeGB
(如設置為物理內存的50%),優化查詢(添加索引);wiredTiger
的journal
是否開啟(默認開啟),確認副本集狀態(rs.status()
),調整寫入確認級別(如w: 1
);rs.syncFrom()
動態調整同步源,監控oplog
大?。?code>db.oplog.rs.stats().maxSize),必要時擴大oplog
。9. 尋求外部幫助
若以上步驟無法解決問題,可參考MongoDB官方文檔(docs.mongodb.com)、社區論壇(如Stack Overflow的MongoDB標簽),或聯系MongoDB技術支持(需企業版訂閱)提供詳細的錯誤日志和環境信息。