1:首先要明白一點:/var/run/mongodb/mongod.pid exists 這個錯誤的出現不會因爲此文件的刪除而解決掉,因爲權限不足,
我們無法完全刪除掉這個文件。所以我們首先要解決權限的問題。這一點我們可以在mongod.log信息中得到答案。
通過sudo more /var/log/mongodb/mongod.log 可以查看詳情
2:如果我們修改了MongoDB的數據存放目錄爲/mongo/【sudo mkdir mongo】,首先要明白,我們新建的目錄mongo是沒有權限存放數據的,我們要把存放數據的權限給予它,
假設我們現在登錄的用戶爲shiwei,並不是以root用戶角色登錄的,如果一開始就是以root角色進行登錄的,則sudo chown -R shiwei:shiwei /mongo命令不需要。則這樣修改: sudo chown -R shiwei:shiwei /mongo
原因:因爲mongo目錄創建的時候是以root用戶創建的,但是我們使用shiwei這個角色登錄時,shiwei這個用戶的角色是沒有mongo的控制權限的。
[shiwei@hdp-07 mongodb]$ ls -l /
total 110
...
drwxr-xr-x 2 root root 0 Sep 6 21:16 misc
drwxr-xr-x. 2 root root 4096 Sep 23 2011 mnt
drwxr-xr-x 2 shiwei shiwei 4096 Sep 6 21:26 mongo
drwxr-xr-x 2 root root 0 Sep 6 21:16 net
drwxr-xr-x. 3 root root 4096 Jun 8 22:42 opt
...
通過下面可以看到,MongoDB默認情況下,數據存儲目錄是由mongod組的mongod角色控制的
[shiwei@hdp-07 mongodb]$ sudo ls -l /var/lib/
total 112
...
drwxr-xr-x. 2 root root 4096 Jun 8 22:59 misc
drwxr-x---. 2 root slocate 4096 Sep 6 20:18 mlocate
drwxr-xr-x 4 mongod mongod 4096 Sep 6 21:30 mongo
drwxr-xr-x. 5 root root 4096 Jun 8 22:41 nfs
...
3:通過命令“sudo ls -l /var/lib”可以看到 drwxr-xr-x 4 mongod mongod 4096 Sep 6 09:19 mongo
mongo目前是以mongod的角色運行的,所以我們要賦予mongod角色權限。 sudo chown -R mongod:mongod /mongo/
原因:當我們使用yum方式安裝MongoDB時,yum會主動幫我們生成mongod這個角色,並且以這個角色運行mongo(我們數據的存儲目錄),所以我們要把這個存儲目錄的權限賦予mongod.
總結:這個問題出現的主要原因就是我們修改了MongoDB的數據存儲路徑,但是MongoDB的數據存儲路徑默認是由mongod組的mongod角色控制的,所以我們要把新建數據的存儲目錄的權限賦予mongod組的mongod角色,命令就是sudo chown -R mongod:mongod /mongo/
完整的命令如下:
[shiwei@hdp-07 mongodb]$ sudo chown -R shiwei:shiwei /mongo/
[shiwei@hdp-07 mongodb]$ sudo chown -R mongod:mongod /mongo/
[shiwei@hdp-07 mongodb]$ sudo rm -rf /var/run/mongodb/mongod.pid
此時可以正常啓動。
[shiwei@hdp-07 mongodb]$ sudo service mongod start
Starting mongod: [ OK ]
在我處理這個問題的時候,外國的一位網友同樣提供了一個解決方案,也同樣適用。
https://stackoverflow.com/questions/41678609/mongo-restart-error-var-run-mongodb-mongod-pid-exists
希望各位不要在此入坑,共勉