Linux服務器mongodb數據庫掛掉了的重連方法(超詳細,持續更新!)


緣由:linux服務器mongodb數據庫掛掉了,需要重連

一、先systemctl方式啟動mongo,測試是否能成功

systemctl status/start/stop mongod

二、手動方式啟動(不推薦此方法)

1. 先mongo看能否連接成功

mongo

2. 查看mongo的數據庫存放路徑(dbpath)或者查看到mongod.conf文件路徑

ps -ax | grep mongod

3. 在mongod.conf中查看數據庫存放路徑(dbpath)

/etc/mongo.conf      # mongo.conf文件路徑。vim打開查看mongo數據庫的dbpath
/var/lib/mongo       # mongo的數據庫存放路徑(dbpath)

4. 查看mongo的安裝路徑

root@xxx:/# whereis mongo
mongo: /usr/bin/mongo 

5. 切換到mongo的安裝bin路徑,執行重啟命令

cd /usr/bin
sudo ./mongod -dbpath 剛剛查到的mongo數據庫存放地址(dbpath)

如:sudo ./mongod -dbpath /var/lib/mongo

6. 有些時候,這種手動啟動方式,關閉jumpserver連接服務器后會mongo數據庫會斷連,所以可以使用 nohup 方式后台一直啟動,具體命令:

nohup mongod -dbpath /var/lib/mongo > out.log &

nohup 英文全稱 no hang up(不掛起),用於在系統后台不掛斷地運行命令,退出終端不會影響程序的運行, 具體可以查看菜鳥教程的解釋和示例
以上命令表示在后台執行 mongod -dbpath /var/lib/mongo (mongo手動啟動命令),並重定向輸入到 out.log 文件

7. 清理舊日志,釋放磁盤空間(以下摘自菜鳥教程)

df 以磁盤分區為單位查看文件系統,可以獲取硬盤被占用了多少空間,目前還剩下多少空間等信息。
例如,我們使用df -h命令來查看磁盤信息, -h 選項為根據大小適當顯示:

顯示內容參數說明:

Filesystem:文件系統
Size: 分區大小
Used: 已使用容量
Avail: 還可以使用的容量
Use%: 已用百分比
Mounted on: 掛載點

相關命令:

df -hl:查看磁盤剩余空間
df -h:查看每個根路徑的分區大小
du -sh [目錄名]:返回該目錄的大小
du -sm [文件夾]:返回該文件夾總M數
du -h [目錄名]:查看指定文件夾下的所有文件大小(包含子文件夾)

三、可以通過上面手動啟動mongo成功,但Jenkins更新,mongo啟動失敗,以下為正常排查流程

  • 查看Linux系統日志,看下mongo啟動命令錯誤日志
  • 排查mongo自身日志,並依次解決
  • 重啟mongo

1. 查看Linux系統日志,先切換root用戶,然后vim打開Linux系統日志,日志文件在/var/log/messages ,路徑和文件不對自行再查下

sudo su
/var/log/messages

2. vim打開后,/ 輸入mongo進行查找定位,發現命令錯誤日志

錯誤顯示子進程退出失敗,mongo啟動失敗,應該是之前我們直接kill mongo進程號異常關閉mongo導致, 系統日志沒有找到關鍵的錯誤原因和解決辦法,再進入mongo日志進行定位查找

3. 查找mongo日志文件路徑

vim etc/mongod.conf

vim打開后查找到mongo的日志文件路徑為:/var/log/mongodb/mongod.log

4. vim打開mongo日志, 繼續定位mongo啟動失敗問題

MongoDB的日志文件在設置 logappend=true 的情況下,會不斷向同一日志文件追加的,時間長了,日志文件會變得非常大,vim打開會很慢
可以將舊的mongod.log文件改名,新建一個同名的mongod.log,再來復現Jenkins更新時mongo啟動失敗問題,這樣vim打開就很快了
打開mongo日志文件后,錯誤如下:(可以先命令行模式輸入nohl取消之前vim搜索mongo關鍵字的高亮顯示)

5. mongod.lock文件暫不可用問題(Unable to lock the lock file)

以上錯誤表示:mongod.lock文件暫不可用,因為我們之前手動拉起了一個mongo,而mongo啟動一個示例后就會占用mongod.lock文件,所以Jenkins再啟動mongo就會提示mongod.lock文件暫不可用

6. mongo地址和端口被占用(SocketException: Address already in use)

以上錯誤表示:mongo默認的127.0.0.1:27017地址和端口被占用了

以上錯誤表示:無法斷開套接字文件/tmp/mongodb-27017.sock,mongodb-27017.sock可以理解為一個套接字管道文件

8. mongo目錄下文件權限錯誤(Permission denied)

以上錯誤表示:mongo目錄下的WiredTiger.turtl文件操作時權限錯誤,這就引申一個mongo啟動用戶組的問題

9. 先查看正常的服務器下,mongo的文件權限及用戶組

top查看得知正常機器人的mongo啟動的用戶組為mongod

10. 查看啟動錯誤的mongo文件權限及用戶組

ls -ll 查看var/lib/mongo目錄下的文件權限及用戶組

11. 更改mongo目錄下的文件權限及用戶組為之前查到的mongod

sudo chown -R mongod:mongod /var/lib/mongo/*

12. top查看mongod運行的用戶組,確定是否為mongod,如果是roo等其他用戶組,不是mongod用戶組則需要手動關閉mongo連接再重新執行Jenkins更新

sudo chown -R mongod:mongod /var/lib/mongo/*

13. 進入mongo后執行手動關閉mongo連接,切忌使用kill進程方式,否則又會報之前的mongo異常關閉錯誤

mongo
use admin
db.shutdownServer()

14. 重新執行Jenkins更新,mongo即被正常啟動了

結語:這次踩坑還是有很多益處,以后要學着多看日志,包括系統日志和出問題的工具,數據庫,框架等日志,通過日志來一步步定位問題和解決

這次mongo的問題最初是服務器系統磁盤滿了,所以更新失敗,但是我先一步進行手動啟動mongo導致各種mongo文件占用和文件權限被更改才導致后面各種更新時,mongo啟動失敗,還是需規范化排錯流程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM