Debian下MongoDB故障排查指南
使用systemctl
命令確認MongoDB服務是否正在運行,若未運行則嘗試啟動并設置開機自啟:
sudo systemctl status mongod # 查看服務狀態
sudo systemctl start mongod # 啟動服務
sudo systemctl enable mongod # 設置開機自啟
MongoDB的日志文件默認位于/var/log/mongodb/mongod.log
,通過以下命令實時查看最新日志或搜索特定錯誤關鍵詞(如“error”“failed”):
sudo tail -f /var/log/mongodb/mongod.log # 實時查看最新日志
sudo grep "error" /var/log/mongodb/mongod.log # 搜索錯誤信息
sudo grep "failed" /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 # 修改屬主為mongodb
sudo chmod -R 755 /var/lib/mongodb # 設置目錄權限
netstat
或ss
命令確認27017
端口未被其他進程占用:sudo netstat -tulnp | grep 27017 # 查看端口占用情況
sudo ss -tulnp | grep 27017 # 替代命令(更高效)
若端口被占用,需停止沖突進程或修改MongoDB的net.port
配置。ufw
防火墻,需允許27017
端口通過:sudo ufw allow 27017/tcp # 允許TCP端口27017
sudo ufw reload # 重新加載防火墻規則
mongostat
(監控操作頻率)和mongotop
(監控讀寫耗時)實時查看數據庫性能:mongostat # 監控操作統計
mongotop # 監控讀寫耗時
explain()
方法分析查詢性能,找出未使用索引或低效查詢:mongo # 進入MongoDB Shell
use your_database # 切換至目標數據庫
db.your_collection.find({field: "value"}).explain("executionStats") # 分析查詢計劃
確保系統有足夠的內存、磁盤空間和CPU資源供MongoDB運行:
free -h # 查看內存使用情況
df -h # 查看磁盤空間使用情況
top # 查看CPU使用率
E11000 duplicate key error
或lock file exists
):刪除數據目錄下的mongod.lock
文件(需確保服務已停止):sudo service mongod stop # 停止服務
sudo rm /var/lib/mongodb/mongod.lock # 刪除鎖文件(路徑以實際為準)
sudo service mongod start # 重新啟動服務
rs.status()
檢查副本集成員狀態,確保所有成員正常同步。若使用舊版本MongoDB(如4.x),可能存在已知bug,建議升級到最新穩定版(如6.x),升級前需備份數據并參考官方升級指南。
若以上步驟無法解決問題,可參考MongoDB官方文檔的故障排除章節,或在社區論壇(如Stack Overflow、MongoDB Community)搜索類似問題的解決方案。