使用systemctl
命令確認MongoDB服務是否正在運行,若未運行則嘗試啟動:
sudo systemctl status mongod # 查看服務狀態
sudo systemctl start mongod # 啟動服務
sudo systemctl enable mongod # 設置開機自啟(可選)
若啟動失敗,需結合日志進一步分析原因。
MongoDB的日志文件默認位于/var/log/mongodb/mongod.log
,通過tail
命令查看實時日志或grep
過濾關鍵錯誤信息:
sudo tail -f /var/log/mongodb/mongod.log # 實時查看日志
sudo grep "error" /var/log/mongodb/mongod.log # 篩選錯誤日志
日志中通常包含服務啟動失敗、權限問題、連接拒絕等具體原因。
MongoDB的主配置文件為/etc/mongod.conf
,需檢查以下關鍵配置項是否正確:
storage.dbPath
:數據存儲目錄(如/var/lib/mongodb
);systemLog.path
:日志文件路徑(如/var/log/mongodb/mongod.log
);net.port
:監聽端口(默認27017
);net.bindIp
:綁定的IP地址(127.0.0.1
僅本地訪問,0.0.0.0
允許遠程訪問)。sudo systemctl restart mongod
確保storage.dbPath
指定的數據目錄存在,且MongoDB進程(屬主為mongodb
)有讀寫權限:
sudo mkdir -p /var/lib/mongodb # 創建數據目錄(若不存在)
sudo chown -R mongodb:mongodb /var/lib/mongodb # 修改屬主和屬組
sudo chmod -R 755 /var/lib/mongodb # 設置目錄權限
權限不足會導致MongoDB無法讀寫數據,進而無法啟動。
netstat
或ss
命令確認27017
端口是否被MongoDB占用,若有其他進程占用需停止或修改端口:sudo netstat -tulnp | grep 27017 # 查看端口占用情況
sudo ss -tulnp | grep 27017 # 替代命令(更現代)
ufw
防火墻,需允許27017
端口通過:sudo ufw allow 27017 # 允許MongoDB默認端口
sudo ufw reload # 重新加載防火墻規則
端口被占用或防火墻阻止會導致連接失敗。
mongostat
:監控實時性能指標(如插入/查詢次數、響應時間);mongotop
:查看各數據庫/集合的讀寫耗時,定位性能瓶頸;explain()
:分析查詢計劃,優化慢查詢(如未使用索引):use your_database; # 切換數據庫
db.your_collection.find().explain("executionStats"); # 分析查詢
這些工具可幫助識別性能問題。
使用top
、htop
、df
等命令確認系統資源是否充足:
top # 查看CPU/內存使用
df -h # 查看磁盤空間
若使用舊版本MongoDB(如低于4.4),可能存在已知bug,建議升級到最新穩定版(如6.0+):
# 導入MongoDB官方GPG密鑰
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
# 添加MongoDB官方源
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
# 更新包數據庫并安裝
sudo apt-get update && sudo apt-get install -y mongodb-org
# 重啟服務
sudo systemctl restart mongod
升級前需備份數據,避免數據丟失。
若以上步驟無法解決問題,可參考MongoDB官方文檔(如故障排除指南)或在社區論壇(如Stack Overflow、MongoDB Community)搜索類似問題,尋求解決方案。