我在根目录中创建了/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
答案 0 :(得分:232)
问题是您创建的目录/data/db
由root用户拥有并且只能由root用户写入,但您自己正在运行mongod。有几种方法可以解决这个问题,但最终,您必须为相关目录提供正确的权限。如果这是用于制作,我会建议你查看文档并仔细考虑 - 你可能需要特别小心。
但是,如果这只是用于测试而你只是需要它来工作并继续使用它,你可以试试这个,这将使每个人都可以写入目录:
> sudo chmod -R go+w /data/db
或者这将使您拥有该目录:
> sudo chown -R $USER /data/db
答案 1 :(得分:43)
在Mac上,我必须执行以下操作:
sudo chown -R $USER /data/db
sudo chown -R $USER /tmp/
因为/tmp
里面还有一个文件,Mongo也需要访问
答案 2 :(得分:34)
你可以使用mongo作为root,对我有用:
$ sudo mongod
答案 3 :(得分:18)
如果您的系统使用SELinux,请确保为您创建的目录使用正确的上下文:
ls -dZ /data/db/
ls -dZ /var/lib/mongo/
并使用以下方法克隆上下文:
chcon -R --reference=/var/lib/mongo /data/db
答案 4 :(得分:16)
我遇到了同样的问题,以下解决方案解决了这个问题。您应该尝试以下解决方案。
sudo mkdir -p / data / db
sudo chown -R'username'/ data / db
答案 5 :(得分:4)
如果您正在检查mongodb日志,并且遇到这样的错误,请按照我的步骤进行操作。它是由于您的db.Taitung.aggregate([
{
"$project": {
theater: true,
theaterCn: true,
movie: {
$filter: {
input: {
$map: {
input: "$movie",
as: "movie",
in: {
cnName: "$$movie.cnName",
enName: "$$movie.enName",
versionType: "$$movie.versionType",
releasedTime: {
$filter: {
input: "$$movie.releasedTime",
as: "movie",
cond: { $and: [
{$gte: [ "$$movie", new Date("2018-09-27T18:40:00.000Z") ]},
{$lte: [ "$$movie", new Date("2018-09-27T22:40:00.000Z") ]}
]}
}
}
}
}
},
as: "movie",
cond: { $eq: [ "$$movie.enName", "Johnny English Strikes Again" ] }
}
}
}
}
])
目录存在权限问题而发生的。我正在使用ubuntu16.04,通过运行以下两个简单命令找到了解决方案。
步骤1:授予/ data / db目录的权限:
/data/db
步骤2:尝试以以下方式启动mongod服务:
sudo chmod -R 0777 /data/db
步骤3:检查mongod服务的状态:
sudo service mongod start
答案 6 :(得分:2)
我遇到了完全相同的问题,我解决了这个问题,这是一步一步的解释:
在尝试其他所有操作之前,只需更改到包含mongodb bin目录的mongodb目录,然后只需在终端中使用命令:
sudo bin / mongod
以root用户身份运行mongodb,可能会要求您以root用户身份输入密码。如果仍然无法运行mongodb,请执行以下操作:
首先,让我们通过输入终端来查看mongodb数据目录的权限模式:
ls -ld / data
(p.s。或者我们可以输入" ls -l /"查看根目录中包括/ data目录的所有目录和文件的权限模式。)
root用户的权限模式应该是" rwx",即root用户能够读取,写入和执行文件。 为了实现这一点,我们使用命令通过键入Terminal:
来更改权限模式chmod 755 / data
(即755是权限设置参数的特定八进制表示法) 这将/ data目录的权限模式设置为" rwxr-xr-x",即root用户能够读取,写入和执行,而Group用户和Everyone只能读取和执行
注意:当您被拒绝执行此操作时,请键入:
sudo chmod 755 / data
将权限设置为root用户。
然后,当完成此步骤时,让我们通过键入来重新获得权限模式 再次: ls -ld / data
,输出应如下所示:
drwxr-xr-x 3根轮102 3月3日17:00 /数据
(p.s.你不必担心开头的" d"并注意" rwxr-xr-x"设置现已完成。
然后我们全部设置好了你现在可以改回mongodb目录并输入:
sudo bin / mongod
运行mongodb。
希望这有帮助。
答案 7 :(得分:2)
很好的解决方案,但我想知道为什么没有人为Windows提供解决方案。
如果您使用的是Windows,您只需要以管理员身份运行" cmd。
答案 8 :(得分:2)
修复/data/db
(或/var/lib/mongodb
)的权限:
sudo chown -R mongodb: /data/db
然后重新启动MongoDB,例如使用
sudo systemctl restart mongod
如果没有帮助,请检查错误消息(如果使用的数据目录不同于/ var / lib / mongodb)。在这种情况下,运行
sudo chown -R mongodb: <insert your data directory here>
答案 9 :(得分:1)
如果您不需要在根目录中拥有数据库目录,则可以在主目录(data/db
)中创建mkdir -p ~/data/db
。
然后,您可以使用--dbpath
选项启动MongoDB服务器:
mongod --dbpath=$(echo ~)/data/db
(这是假设您是从终端启动的。出于某些奇怪的原因,mongod
不接受〜作为主目录路径,因此bash echo替换技巧很可取,您也可以编写{{ 1}})
实际上,它不必是/home/yourusername/data/db
,它可以在您想要的任何位置,这样您就可以拥有多个数据库路径并很好地组织所有内容。可能不是生产的最佳选择(取决于您要做什么),但是对于开发工作来说不错。
答案 10 :(得分:0)
如果您使用的是 Windows ,并且尝试设置MongoDB,请按照see it here上面建议的 Enrique 的方式运行cmd作为Admnistrator。 >
答案 11 :(得分:0)
首先停止所有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
现在您已经完成了,只需启动MongoDB服务,如果没有帮助,尝试更改端口,例如:
sudo service mongod restart && mongod # if didn't help run below cmd
mongod --port 27018
注意:对我来说,所有这些东西都有效,希望对您有用!
答案 12 :(得分:0)
这在Ubuntu LTS 20.04中对我有用:
$ sudo service mongod start
答案 13 :(得分:0)
检查是否启用了SElinux。 如果它处于强制模式,则尝试使用许可模式。如果有帮助,应该为mongodb创建SElinux策略。
您可以尝试使用audit2allow-检查https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-fixing_problems-allowing_access_audit2allow
答案 14 :(得分:0)
大多数安装 mongo 的方法都会创建一个用户 'mongodb'。如果你有这个用户,你应该使用它,而不是仅仅在权限上进行黑客攻击,直到一切似乎都正常......
cat /etc/passwd | grep mongo
尝试以 root 用户身份运行 mongodb 是一个坏主意,尝试以普通用户身份运行它会给您带来错误消息的提示。使用 -u 选项 sudo 以不同用户身份运行程序。
sudo -u mongodb mongod --dbpath /what/ever/
此外,各种说明和教程要求您停止 mongod,进行一些更改,然后重新启动它。根据您停止 mongod 的方式,它的锁定文件可能仍会在 tmp 中停滞不前,因此请确保在尝试重新启动守护程序之前该文件已消失...
sudo rm /tmp/mongodb-27017.sock
答案 15 :(得分:-1)
您只需要以超级用户身份运行命令:
从终端输入sudo su mongod