MongoDB:initAndListen中的异常:20尝试在只读目录上创建锁定文件:/ data/db,终止

whi*_*n96 123 mongodb

/data/db在根目录中创建并运行./mongod:

[initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] now exiting
[initandlisten] shutting down with code:100
Run Code Online (Sandbox Code Playgroud)

Bjo*_*che 261

问题是您创建的目录/data/db由root用户拥有并且只能由root用户编写,但您自己正在运行mongod.有几种方法可以解决这个问题,但最终,您必须为相关目录提供正确的权限.如果这是用于制作,我建议你检查文档并仔细考虑 - 你可能需要特别小心.

但是,如果这只是用于测试而你只是需要它来工作并继续使用它,你可以试试这个,这将使每个人都可以写入目录:

> sudo chmod -R go+w /data/db
Run Code Online (Sandbox Code Playgroud)

或者这将使您拥有的目录:

> sudo chown -R $USER /data/db
Run Code Online (Sandbox Code Playgroud)

  • 我想有人可能需要`-R`来递归地更改所有`/ data/db`文件. (4认同)
  • 谢谢你.试了一下,仍然得到同样的错误 (2认同)
  • 后者适合我,谢谢 (2认同)

San*_*ich 50

在Mac上,我必须执行以下操作:

sudo chown -R $USER /data/db
sudo chown -R $USER /tmp/
Run Code Online (Sandbox Code Playgroud)

因为还有一个/tmpMongo也需要访问的文件

  • 适用于 Fedora 28 Linux (2认同)

小智 32

你可以使用mongo作为root,适合我:

$ sudo mongod
Run Code Online (Sandbox Code Playgroud)

  • 什么错误,你们建议用root访问运行数据库?非常糟糕的主意,请查看SO中的文档或其他帖子,以准确解决此问题.不要以sudo身份运行. (9认同)
  • 不,不要这样做,尤其是在可以远程访问mongo实例的任何情况下。通常,您应该有一个`mongodb`用户(`adduser mongodb`),并且mongo数据文件应全部归该用户所有(即`sudo chown -R mongodb:mongodb / data / db`。然后运行`mongod`作为该用户。 (3认同)

drr*_*sum 21

如果您的系统使用SELinux,请确保为您创建的目录使用正确的上下文:

ls -dZ /data/db/
ls -dZ /var/lib/mongo/
Run Code Online (Sandbox Code Playgroud)

克隆上下文:

chcon -R --reference=/var/lib/mongo /data/db
Run Code Online (Sandbox Code Playgroud)

  • ls -dZ /var/lib/mongodb/ 用于更高版本的 mongo (2认同)

Blo*_*gic 17

在此处输入图片说明首先停止所有mongoDB服务,然后在上创建一个目录/,这意味着root,如果你没有,也删除端口文件。授予该目录的所有权限,成为该目录的所有者,运行以下命令:

sudo service mongod stop
sudo rm -rf /tmp/mongod*
sudo mkdir -p /data/db
sudo chmod -R a+wxr /data
sudo chown -R $USER:$USER /data
Run Code Online (Sandbox Code Playgroud)

现在你已经完成了,只需启动 MongoDB 服务,如果没有帮助,请尝试更改端口,如:

sudo service mongod restart && mongod # if didn't help run below cmd
mongod --port 27018
Run Code Online (Sandbox Code Playgroud)

注意:对我来说,所有这些东西都有效,希望对你有用,伙计!


Ham*_*han 16

我遇到了同样的问题,以下解决方案解决了这个问题.您应该尝试以下解决方案.

sudo mkdir -p/data/db
sudo chown -R'username'/ data/db


plc*_*sta 12

修复/data/db(或/var/lib/mongodb)的权限 :

sudo chown -R mongodb: /data/db
Run Code Online (Sandbox Code Playgroud)

然后重新启动MongoDB,例如使用

sudo systemctl restart mongod
Run Code Online (Sandbox Code Playgroud)

如果这没有帮助,请检查您的错误消息,如果您使用的是与 /var/lib/mongodb 不同的数据目录。在这种情况下运行

sudo chown -R mongodb: <insert your data directory here>
Run Code Online (Sandbox Code Playgroud)

来源


Enr*_*ado 6

不错的解决方案,但我想知道为什么没有人为 Windows 提供解决方案。

如果您使用的是 Windows,则只需“以管理员身份运行”cmd。

  • 我认为这是因为人们通常不在 Windows 上运行数据库服务器。 (7认同)