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
希望各位不要在此入坑,共勉
本文详细解释了如何解决MongoDB启动时遇到的/var/run/mongodb/mongod.pidexists错误,包括调整数据存储目录权限和解决因权限不足导致的启动失败问题。

1万+

被折叠的 条评论
为什么被折叠?



