1. 確認故障現象
記錄故障發生的頻率、具體錯誤信息(如啟動失敗、連接被拒絕、查詢超時)及觸發條件(如重啟服務、高并發場景),這是故障排查的基礎方向。
2. 檢查MongoDB服務狀態
使用systemctl
或service
命令確認MongoDB服務是否正在運行:
sudo systemctl status mongod # 推薦(Ubuntu 16.04+)
# 或
sudo service mongod status
若服務未運行,會顯示“inactive (dead)”或“failed”狀態,需進一步排查啟動失敗原因。
3. 查看MongoDB日志文件
日志是定位故障的關鍵,MongoDB默認日志路徑為/var/log/mongodb/mongod.log
。使用以下命令實時查看最新日志(重點關注“ERROR”“FAILED”等關鍵字):
sudo tail -n 100 /var/log/mongodb/mongod.log # 查看最后100行
# 或實時跟蹤日志
sudo tail -f /var/log/mongodb/mongod.log
日志中會明確提示錯誤類型(如配置錯誤、權限問題、數據損壞)。
4. 驗證配置文件正確性
MongoDB主配置文件通常為/etc/mongod.conf
,需檢查以下關鍵配置項:
dbPath
:數據存儲目錄是否存在(如/var/lib/mongodb
);logPath
:日志文件路徑是否有寫入權限;port
:端口是否被占用(默認27017);bindIp
:是否允許遠程連接(如127.0.0.1
僅本地訪問,0.0.0.0
允許所有IP)。sudo systemctl restart mongod
可使用以下命令快速檢查配置文件語法:
mongod --config /etc/mongod.conf --eval "print('配置文件語法正確')"
若輸出“配置文件語法正確”,則說明配置文件無明顯語法錯誤。
5. 檢查數據目錄與權限
MongoDB需要對其數據目錄(dbPath
)有讀寫權限。默認數據目錄為/var/lib/mongodb
,執行以下命令修復權限問題:
# 確認數據目錄是否存在
ls -ld /var/lib/mongodb
# 修改所有者為MongoDB用戶(通常為'mongodb')
sudo chown -R mongodb:mongodb /var/lib/mongodb
# 設置正確權限(755為目錄通用權限)
sudo chmod -R 755 /var/lib/mongodb
若數據目錄損壞(如磁盤故障),可使用mongod --repair
命令修復(需提前備份數據):
sudo mongod --config /etc/mongod.conf --repair
6. 檢查端口占用情況
MongoDB默認使用27017端口,若該端口被其他進程占用,會導致服務無法啟動。使用以下命令檢查端口占用:
sudo netstat -tulnp | grep 27017 # 傳統方式
# 或
sudo lsof -i :27017 # 更直觀
若發現占用進程(如PID=1234
),可選擇停止該進程(sudo kill -9 1234
)或修改MongoDB配置文件中的port
項(如改為27018
)。
7. 分析系統資源狀態
磁盤空間不足或內存耗盡會導致MongoDB無法正常運行。使用以下命令檢查系統資源:
# 檢查磁盤空間使用情況(重點關注根分區“/”)
df -h /
# 檢查內存使用情況
free -m
# 檢查磁盤I/O性能(需安裝sysstat工具)
iostat -x 1 5
若磁盤空間不足(使用率>80%),需清理無用文件(如日志、臨時文件);若內存不足,可優化MongoDB緩存設置(如調整storage.wiredTiger.engineConfig.cacheSizeGB
)或增加物理內存。
8. 使用MongoDB內置工具診斷
serverStatus
命令:查看服務器整體狀態(連接數、內存使用、鎖等待等):mongo --eval "db.serverStatus()"
currentOp
命令:查看當前正在執行的操作(定位慢查詢或阻塞操作):mongo --eval "db.currentOp()"
mongostat
工具:實時監控操作統計(如insert/update/delete次數、查詢延遲):mongostat
mongotop
工具:查看集合級別的讀寫耗時(定位熱點集合):mongotop
9. 常見問題針對性解決
bindIp
配置(是否允許遠程連接)、防火墻設置(sudo ufw allow 27017
)或SELinux狀態(sudo setenforce 0
臨時關閉)。mongod --repair
修復(可能導致部分數據丟失)。