MongoDB在CentOS上的故障排查需圍繞服務狀態、配置正確性、資源可用性、權限設置等核心維度展開,以下是系統化的排查步驟:
首先確認MongoDB服務是否處于運行狀態,使用以下命令查看服務狀態:
sudo systemctl status mongod
若服務未啟動,嘗試啟動服務并設置開機自啟:
sudo systemctl start mongod
sudo systemctl enable mongod
啟動失敗時,需結合日志進一步分析原因。
MongoDB的日志文件是故障排查的關鍵線索,默認路徑為/var/log/mongodb/mongod.log
。使用以下命令實時查看日志末尾內容:
sudo tail -f /var/log/mongodb/mongod.log
若日志文件無法訪問,可檢查系統日志(通過journalctl
)獲取關聯信息:
sudo journalctl -xe | grep mongod
日志中常見的錯誤包括配置文件語法錯誤、數據目錄權限問題、端口沖突等。
MongoDB的主配置文件路徑為/etc/mongod.conf
,需重點檢查以下關鍵配置項:
storage.dbPath
:數據存儲目錄是否存在且路徑正確(如/var/lib/mongo
);net.port
:監聽端口(默認27017
)是否未被其他進程占用;net.bindIp
:綁定IP地址(如0.0.0.0
允許遠程連接,127.0.0.1
僅本地訪問);systemLog.path
:日志文件路徑是否可寫。sudo systemctl restart mongod
可使用在線YAML驗證工具檢查配置文件語法是否正確。
MongoDB默認使用27017
端口,若該端口被其他進程占用,會導致服務無法啟動。使用以下命令檢查端口占用情況:
sudo netstat -tuln | grep 27017
# 或使用lsof命令
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep 27017
若端口被占用,可通過kill
命令終止占用進程(需確認進程合法性):
sudo kill -9 <PID>
或修改MongoDB配置文件中的net.port
為其他可用端口。
MongoDB進程需對數據目錄(如/var/lib/mongo
)擁有讀寫權限,否則會導致啟動失敗。使用以下命令修復權限:
sudo chown -R mongod:mongod /var/lib/mongo
sudo chmod -R 755 /var/lib/mongo
若數據目錄路徑被修改,需同步更新配置文件中的storage.dbPath
并重啟服務。
系統資源不足(如磁盤空間耗盡、內存不足)會導致MongoDB無法正常運行:
df -h
命令查看磁盤剩余空間,確保數據目錄所在分區有足夠空間(建議保留至少10%空閑空間);free -h
或top
命令查看內存占用情況,若內存不足,可調整MongoDB的wiredTiger
緩存大?。ㄔ谂渲梦募性O置storage.wiredTiger.engineConfig.cacheSizeGB
)。若系統啟用了SELinux(sestatus
顯示Enforcing
模式),可能會阻止MongoDB訪問數據目錄或端口??膳R時將SELinux設置為permissive
模式排查問題:
sudo setenforce 0
若問題解決,需調整SELinux策略或永久禁用(修改/etc/selinux/config
中的SELINUX=disabled
,需重啟系統)。對于數據目錄權限問題,可使用以下命令修復安全上下文:
sudo chcon -Rv --type=mongod_var_lib_t /var/lib/mongo
MongoDB提供了多種內置工具用于性能監控和狀態檢查:
mongostat
:實時監控數據庫操作統計(如查詢、插入、更新次數);mongotop
:監控集合級別的讀寫時間,定位慢查詢;db.serverStatus()
:在MongoDB shell中執行,獲取實例詳細狀態(包括鎖、內存、連接數等);db.runCommand({logRotate: 1})
:手動觸發日志輪轉,避免日志文件過大。若MongoDB發生崩潰,系統會生成內核轉儲文件(通常位于/var/crash
目錄),可使用crash
工具分析轉儲文件(需安裝crash
和內核調試符號):
sudo yum install crash kernel-debuginfo-$(uname -r)
sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/vmcore
通過分析轉儲文件可定位崩潰原因(如內核bug、內存損壞)。
27017
端口(sudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reload
);確認認證信息(用戶名、密碼、數據庫)是否正確;通過以上步驟可系統化排查CentOS環境下MongoDB的常見故障,關鍵是根據日志和錯誤信息定位具體原因,針對性解決。若問題仍無法解決,建議參考MongoDB官方文檔或聯系技術支持。