Linux環境下MongoDB故障排查指南
日志是故障排查的核心線索,Linux下MongoDB的日志主要分布在兩個位置:
journalctl -u mongod.service
查看與MongoDB相關的系統級錯誤(如服務啟動失敗、權限問題);/var/log/mongodb/mongod.log
(可通過cat /etc/mongod.conf | grep logpath
確認),使用tail -f /var/log/mongodb/mongod.log
實時追蹤最新日志,重點關注“ERROR”“FAILED”等關鍵詞。使用systemctl status mongod.service
命令檢查服務狀態:
sudo systemctl start mongod.service
;MongoDB的主配置文件通常為/etc/mongod.conf
,需重點檢查以下關鍵配置項:
net.port
(默認27017),確保未被其他進程占用;storage.dbPath
(如/var/lib/mongodb
),需存在且具備正確權限;systemLog.path
,確保目錄可寫;net.bindIp
(如0.0.0.0
允許遠程連接,127.0.0.1
僅本地連接);security.authorization
(若啟用,需提前創建用戶)。mongod --config /etc/mongod.conf --fork
測試配置文件語法是否正確。MongoDB對數據目錄和日志文件的權限要求嚴格,常見錯誤包括“Permission denied”“Cannot open file”:
mongod
用戶(或運行服務的用戶),執行sudo chown -R mongod:mongod /var/lib/mongodb
(路徑以配置文件為準);sudo chown -R mongod:mongod /var/log/mongodb
;permissive
模式測試(setenforce 0
),或通過audit2allow
生成自定義規則。若出現連接問題,需檢查端口和網絡配置:
ss -tuln | grep 27017
查看27017端口是否被MongoDB占用,若有其他進程占用,通過kill -9 <PID>
終止;firewall-cmd --permanent --add-port=27017/tcp
,Ubuntu用ufw allow 27017
),并重載防火墻;ping <MongoDB服務器IP>
測試網絡連通性,telnet <IP> 27017
測試端口是否可達。df -h
檢查數據目錄所在磁盤的剩余空間,若使用率超過80%,需清理舊數據(如歸檔日志、備份文件);/etc/security/limits.conf
,添加mongod soft nofile 65535
和mongod hard nofile 65535
;/lib/systemd/system/mongod.service
,在[Service]
段添加LimitNOFILE=65535
,然后執行systemctl daemon-reload
。使用MongoDB自帶工具實時監控性能:
mongostat --host <IP> --port 27017
;mongotop --host <IP> --port 27017
;db.serverStatus()
;mtools
工具包(pip3 install mtools
)分析慢查詢,如mlogfilter mongod.log --slow 1000 | mplotqueries --type scatter
。若日志中出現“WiredTiger error”(如數據文件損壞、磁盤空間不足),需進行存儲引擎修復:
mongod --repair --dbpath /var/lib/mongodb
(路徑以配置文件為準);mongodump
),監控磁盤空間。rs.status()
),確保多數節點在線,修復網絡分區;configsvr
)狀態,確保分片平衡(sh.status()
)。yum update mongod
或apt upgrade mongodb
)。