我用过这些指示在我的 OS X 机器上安装 mongodb。不过,我没有使文件归root所有,我使用了本地用户(markdsievers),并安装到/usr/local/mongodb
和usr/local/mongodb_data
。我已将所有文件和子目录 chmod 和 chown 为rwxrwxr-x markdsievers staff
.
作为用户,markdsievers
我可以使用以下命令启动数据库而不会出现错误:
$ sudo mongod --dbpath=/usr/local/mongodb_data
但是,如果我这样开始:
$ mongod --dbpath=/usr/local/mongodb_data/
我得到:
Unable to create / open lock file for lockfilepath: /usr/local/mongodb_data/mongod.lock errno:13 Permission denied
我在这里缺少什么?
答案1
首先,顺便说一句:将 mongo 数据存储在其中/usr/local/mongodb_data
似乎有点奇怪;大多数幕后存储位于/var/
,或者,对于自行安装的应用程序,位于/var/local/
。请参阅hier(7)
或文件系统层次结构标准更多细节。 (FHS 的命名是错误的:因为它是描述性的,而不是规定性的,所以它是不是一个标准。但值得一读。)
您的mongodb.lock
文件归您所有,root
因为您执行了:
sudo mongod --dbpath=/usr/local/mongodb_data
sudo(8)
以不同的方式执行程序有效用户id(有关详细信息seteuid(2)
,请参阅setreuid(2)
)。因为您没有指定任何其他用户的选项-u
,所以sudo(8)
默认为该root
帐户。因此,您的锁定文件是使用root
所有者和组创建的。 (比较sudo id
一下id
看看有什么变化。)
但奇怪的是,当您停止数据库时,锁定文件应该已被删除mongod
。确保正确停止它——不仅是为了删除锁定文件——而且还为了让您知道数据已正确保存到磁盘。
答案2
做一个ls -l /usr/local/mongodb_data/mongod.lock
我敢打赌,既然您首先以用户“root”身份运行,那么该文件就已经存在,并且归 root 所有。删除它,我打赌它可以作为用户“markdsievers”工作。