ChatGPT解决这个技术问题 Extra ChatGPT

无法创建/打开锁定文件:/data/mongod.lock errno:13 Permission denied

如何让 mongo 在 ec2 上使用已安装的驱动器?我真的不明白。我在 ec2 上附加了一个卷,将驱动器格式化为 root 并以 root 身份启动,但作为 root 我无法访问?我在 ubuntu 12.04 上运行。没有其他 mongo 正在运行

我看到 mongo 在 /data 即 /data/db 中创建了一个“db”目录

cd /
ls -al
drwxr-xr-x  4 root root  4096 Mar  5 16:28 data

cd /data
ls -al
total 28
drwxr-xr-x  4 root root  4096 Mar  5 16:28 .
drwxr-xr-x 24 root root  4096 Mar  5 16:28 ..
drwxr-xr-x  2 root root  4096 Mar  5 16:28 db
drwx------  2 root root 16384 Mar  5 16:20 lost+found


sudo mkfs.ext3 /dev/xvdh
sudo mkdir /data
sudo su - -c 'echo "/dev/xvdh %s auto noatime 0 0" | sudo tee -a /etc/fstab'
sudo mount /data

sudo service mongodb start
mongodb start/running, process 17169

sudo ps -ef | grep mongod
ubuntu   15763 15634  0 16:32 pts/2    00:00:00 tail -f mongodb.log
ubuntu   18049 15766  0 16:43 pts/3    00:00:00 grep --color=auto mongod


Tue Mar  5 16:33:15 [initandlisten] MongoDB starting : pid=15890 port=27017 dbpath=/data 64-bit host=aws-mongo-server-east-staging-20130305161917
Tue Mar  5 16:33:15 [initandlisten] db version v2.2.3, pdfile version 4.5
Tue Mar  5 16:33:15 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08
Tue Mar  5 16:33:15 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Tue Mar  5 16:33:15 [initandlisten] options: { bind_ip: "10.157.60.27", config: "/etc/mongodb.conf", dbpath: "/data", logappend: "true", logpath: "/var/log/mongodb/mongodb.log", replSet: "heythat" }
Tue Mar  5 16:33:15 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Tue Mar  5 16:33:15 dbexit: 
Tue Mar  5 16:33:15 [initandlisten] shutdown: going to close listening sockets...
Tue Mar  5 16:33:15 [initandlisten] shutdown: going to flush diaglog...
Tue Mar  5 16:33:15 [initandlisten] shutdown: going to close sockets...
Tue Mar  5 16:33:15 [initandlisten] shutdown: waiting for fs preallocator...
Tue Mar  5 16:33:15 [initandlisten] shutdown: lock for final commit...
Tue Mar  5 16:33:15 [initandlisten] shutdown: final commit...
Tue Mar  5 16:33:15 [initandlisten] shutdown: closing all files...
Tue Mar  5 16:33:15 [initandlisten] closeAllFiles() finished
Tue Mar  5 16:33:15 [initandlisten] shutdown: removing fs lock...
Tue Mar  5 16:33:15 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Tue Mar  5 16:33:15 dbexit: really exiting now

下面是如果我在删除锁定文件时重新启动....

Tue Mar  5 16:59:15 [initandlisten] MongoDB starting : pid=21091 port=27017 dbpath=/data 64-bit host=aws-mongo-server-east-staging-20130305161917
Tue Mar  5 16:59:15 [initandlisten] db version v2.2.3, pdfile version 4.5
Tue Mar  5 16:59:15 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08
Tue Mar  5 16:59:15 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Tue Mar  5 16:59:15 [initandlisten] options: { bind_ip: "10.157.60.27", config: "/etc/mongodb.conf", dbpath: "/data", logappend: "true", logpath: "/var/log/mongodb/mongodb.log", replSet: "heythat" }
Tue Mar  5 16:59:15 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Tue Mar  5 16:59:15 dbexit: 
Tue Mar  5 16:59:15 [initandlisten] shutdown: going to close listening sockets...
Tue Mar  5 16:59:15 [initandlisten] shutdown: going to flush diaglog...
Tue Mar  5 16:59:15 [initandlisten] shutdown: going to close sockets...
Tue Mar  5 16:59:15 [initandlisten] shutdown: waiting for fs preallocator...
Tue Mar  5 16:59:15 [initandlisten] shutdown: lock for final commit...
Tue Mar  5 16:59:15 [initandlisten] shutdown: final commit...
Tue Mar  5 16:59:15 [initandlisten] shutdown: closing all files...
Tue Mar  5 16:59:15 [initandlisten] closeAllFiles() finished
Tue Mar  5 16:59:15 [initandlisten] shutdown: removing fs lock...
Tue Mar  5 16:59:15 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Tue Mar  5 16:59:15 dbexit: really exiting now
看起来 mongod 上次运行时关闭得很糟糕,并且无法清理它创建的 mongod.lock 文件。该文件的存在是为了防止多个 mongod 实例处理该文件。如果您删除该文件并尝试再次运行 mongod,您应该没有问题
请参阅更新的问题。如果删除锁定文件,同样的问题
好像还是lockfile的问题,lockfile所在目录的权限是什么? TBH 我只在 2 种情况下看到过这种情况:1)锁定文件已经存在,2)mongod 没有在所需位置创建锁定文件的权限。
您应该确保 mongo 用户也可以访问数据目录,chown mongodb:mongodb on /var/lib/monogdb

m
martinedwards

我使用这种方法来解决问题:

sudo chown -R mongodb:mongodb /data/db

添加一个 -R 选项,它是完美的 :)
那就是: sudo chown -R id -u /data/db 为初学者。 :)
结果发现反引号有问题。尝试运行 sudo chown $USER /data/db 而不是原来的命令。
这确实是正确答案。 @Tampa 你应该接受这个答案。顺便说一句 - 你不需要 id -U$USER 的东西。 mongo 有自己的用户/组。您可以并且应该对 mongodb:mongodb 进行硬编码。所以命令只是 sudo chown -R mognodb:mognodb /data/db
这实际上是做什么的?它确实有效,但很想了解:)
a
ankitjaininfo

我在 Ubuntu ec2 实例上遇到了同样的问题。我在第 7 页关注这篇亚马逊文章:

http://d36cz9buwru1tt.cloudfront.net/AWS_NoSQL_MongoDB.pdf

/etc/mongodb.conf 中的 Mongodb 路径设置为 /var/lib/mongodb(主要安装位置和工作)。当我更改为 /data/db(EBS 卷)时,我收到“errno:13 Permission denied”。

首先我跑了 sudo service mongodb stop。然后我使用 ls -la 查看分配给 /var/lib/mongodb (现有路径)的组和所有者 mongodb 并使用 chown 和 chgrp 更改了 /data/db (新路径)以匹配。 (例如:sudo chown -R mongodb:mongodb /data/db)然后我将 etc/mongodb.conf 中的路径更新为 /data/db 并删除了 /var/lib/mongodb 目录中的旧 mongo 文件。然后我运行 sudo service mongodb start 并等了大约一分钟。如果您尝试立即连接到 27017,您将无法连接。一分钟后检查 /data/db(EBS 卷),mongo 应该已经放置了一个日志、mongod.lock、local.ns、local.0 等。如果没有,请尝试 sudo service mongodb restart 并在一分钟后检查。

我刚刚花了一个多小时。更改组和删除旧文件可能不是必需的,但这对我有用。

这是一个关于将 ebs 卷安装到 ec2 实例的精彩视频:

http://www.youtube.com/watch?v=gBII3o3BofU


我一直在努力解决这个问题,并意识到如果你列出你的目标文件夹 ls -lahZ 它会给你安全上下文,mongo数据文件夹的上下文应该设置为:“sudo chcon -R -u system_u -t mongod_var_lib_t /folder/data" 除了明显的权限和用户:组组合之外。希望能帮助到你。
B
Belhor

在我的情况下(AWS EC2 实例,Ubuntu)帮助:

$ sudo mkdir -p /data/db/
$ sudo chown `USERNAME` /data/db

之后一切正常。


这是最好的答案,很可能是运行 mongod 的用户的权限问题
我们正在将 /data/db 的所有权更改/转让给 USERNAME
j
julien bouteloup

您只需授予对 /data/db 文件夹的访问权限。

输入 sudo chown -R <USERNAME> /data/db,将 <USERNAME> 替换为您的用户名。

您可以通过输入 whoami 找到您的用户名。


E
Evers

我按照本教程在带有 Ubuntu 14.04 的 EC2 上安装了带有 EBS 的 mongodb:

http://docs.mongodb.org/ecosystem/platforms/amazon-ec2/

但我没有建议 chown :

sudo chown -R mongodb:mongodb /data /log /journal

解决问题


是的,看来所有者必须是“mongodb”而不是“root”的东西。
b
bitbot

我有类似的问题,实际原因是我之前的尝试已经运行了 mongod 会话。

我跑了

killall mongod

其他一切都按预期运行。

killall 命令将向具有真实 UID 的所有进程发送一个 TERM 信号。所以这会杀死所有正在运行的 mongod 实例,以便您可以启动自己的实例。


这实际上是最短的答案,也是无数小时后解决我的问题的唯一答案......谢谢!
很高兴它有帮助! :) 希望有办法帮助人们更轻松地找到这个答案。
a
amanSingh

对于 mac 用户:运行 ls -ld /data/db/ 输出应该类似于 drwrx-xr-x 20 singh wheel 680 21 Jul 05:49 /data/db/ 其中 singh 是所有者,而 wheel 是它所属的组.运行 sudo chown -R singh:wheel /data/db 运行 mongod


A
Abdullah

截至今天,我试图通过创建/打开锁定文件:/data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?,终止,并尝试了上面发布的所有答案解决了这个问题,因此没有通过添加

sudo chown -R mongodb:mongodb /data/db

除非我将当前用户权限添加到位置路径

sudo chown $USER /data/db

希望这可以帮助某人。另外我刚刚在我的 pi 上安装了 Mongo DB。干杯!


E
Eugene G

我遇到了类似的问题,并按照上面有关使用 sudo chown 等更改所有者的所有说明进行操作。更改后,我仍然有一个 mongodb 实例在后台运行。跑步

ps auxw | grep mongo 

向我展示了其他使用 mongo 在后台运行但未正确关闭的任务。然后我在所有正在运行的服务器上运行 kill 然后可以启动我的服务器。


C
Community

在我的情况下,删除 mongodb.lock 文件不是问题。我这样做了,得到一个关于正在使用的端口的错误:[initandlisten]listen():bind() failed errno:98 Address already in use for socket:0.0.0.0:27017。我在这里找到了另一个解决方案:unable to start mongodb local server,其中包含终止进程的说明:

从 netstat 中找出哪个进程正在运行 mongodb 端口 (27017) sudo netstat -tulpn | grep :27017 输出将是: tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1412/mongod 杀死相应的进程。 sudo kill 1412(将 1412 替换为您在步骤 1 中找到的进程 ID)

我能够再次成功启动 mongodb。我相信我的仍然因不当关闭而运行。


b
b_kik

对于那些使用任务管理器在 Windows 上遇到此错误的人,请结束正在运行的“mongod.exe”实例。完成后永久删除 mongo.lock 文件并运行 mongod.exe。之后它应该可以完美运行。


N
Nestor Milyaev

我的 mongo (3.2.9) 安装在 Ubuntu 上,我的日志文件有以下几行:

2016-09-28T11:32:07.821+0100 E STORAGE  [initandlisten] WiredTiger (13) [1475058727:821829][6785:0x7fa9684ecc80], file:WiredTiger.wt, connection: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied 
2016-09-28T11:32:07.822+0100 I -        [initandlisten] Assertion: 28595:13: Permission denied 
2016-09-28T11:32:07.822+0100 I STORAGE  [initandlisten] exception in initAndListen: 28595 13: Permission denied, terminating

2016-09-28T11:32:07.822+0100 我控制 [initandlisten] dbexit: rc: 100

所以问题出在 /var/lib/mongodb 文件夹的权限上。

sudo chown -R mongodb:mongodb /var/lib/mongodb/
sudo chmod -R 755 /var/lib/mongodb

重启服务器

修复了它,尽管我确实意识到这可能不太安全(在我的情况下,这是我自己的开发盒),在更改数据库和身份验证之后有点工作。


v
vijay

在 Mycase
在 mongodb 版本 2.6.11 默认数据库目录是 /var/lib/mongodb/

$ sudo chown -R id -u /var/lib/mongodb/ $ sudo chown -R id -u /var/lib/mongodb/mongod.lock $ sudo /etc/init.d/mongod stop $ sudo /etc/init .d/mongod 开始


应该是`id -u`
a
aditya

在 Windows10 上安装 mongod 命令后,我遇到了同样的问题。我停止了 mongodb 服务并再次启动它。像魅力一样工作

停止 mongodb 服务的命令(在 Windows 中):net stop mongodb

启动 mongodb 服务器的命令:mongod --dbpath PATH_TO_DATA_FOLDER


G
GSP

在带有 Mongo 2.2.4 实例的 Fedora 18 上,我可以通过以 root 身份调用 setenforce 0 来禁用 SELinux,从而绕过类似的错误。

顺便说一句,这是一个企业环境,不是 Amazon EC2 实例,但症状相似。


I
Ian Mercer

在我的情况下,通过删除日志文件解决了这个问题。

sudo rm /log/mongod.log

尽管错误消息专门针对锁定文件:

exception in initAndListen: 10309 Unable to create/open lock file: 
/data/mongod.lock errno:13 Permission denied 
Is a mongod instance already running?, terminating

这为我指明了正确的方向。在我的服务器上,我必须执行 sudo rm /var/log/mongodb/mongodb.log 和 sudo rm /tmp/mongodb-27017.sock 。
A
Andy Dong

在我杀死 mongod 之后,我遇到了同样的问题:无法启动 mongod。

$> sudo kill `pidof mongod`

2015-08-03T05:58:41.339+0000 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/mongodbtest/replset/data/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating

我直接删除锁后,就可以重启mongod进程了。

$>  rm -rf /data/mongodbtest/replset/data/mongod.lock

u
user4660857

这是我为解决问题所做的:

$sudo mkdir -p /data/db

$export PATH=/usr/local/Cellar/mongodb/3.0.7/bin:$PATH

$sudo chown -R id -u /data/db

然后开始mongo ...

$mongod


F
FelixSFD

我有同样的问题。

我通过使用以下命令将 selinux 状态更改为允许来解决它:

setenforce 0

T
Tasneem Haider

ls -la了解 /var/log/mongodb 的用户和组。然后执行 sudo chown -R user:group /data/db 现在运行 sudo service mongodb start。使用 sudo service mongodb status 检查状态


I
Iacobescu Radu

在 Windows 上,确保控制台以管理员身份启动


C
Community

你可以试试这些方法。第一个。

sudo chown -R mongod:mongod /data/db

但有时,这没有用。第二。如果上述方法没有用,您可以尝试这样做:

mkdir /data/db #作为数据库存储路径 nohup mongod --dbpath /data/db &

或输入:

mongod --dbpath /data/db

获取输出流


考虑到这是一个老问题,你的答案并没有添加任何不存在的东西,你应该问问自己它是否有价值......
y
yangsibai

在 CentOS 6.x 上对我来说:

sudo chown -R mongodb:mongodb <db-path> sudo service mongod restart

我在 /etc/mongod.conf 中设置了自定义 db-path


M
Mohammad Bayat

如果您确实想要与原始问题中的命令等效的一行,则可以使用别名:

mongo --eval "db.getSiblingDB('admin').shutdownServer()"

https://stackoverflow.com/a/11777141/7160782


R
Rajiv Sharma

在 Centos 服务器中

这对我有用

chown -R mongod:mongod /var/lib/mongo

c
chavy

遇到类似的错误,通过删除所有记录(在我的情况下为目录 journals 和文件 mongo.lock...)修复,然后使用 sudo lsof -i:27017 检查端口,如果 smth 在其上运行 kill <PID of the process>,然后尝试运行 {5 } 再次


a
aimuhire

修正:sudo mongod

我遇到了同样的问题,使用 sudo 权限运行 mongod 修复了它。来自 Windows 环境,我只使用 mongod 来启动守护进程,看起来我们需要超级用户权限才能访问 /data/db。

您还可以授予非 root 用户对该路径的读取和写入权限。检查上面的答案以获得指南!


不需要以 root 身份运行 mongod,这可能会使系统更容易受到攻击
S
Shishir

每次尝试启动 mongod 时,只需键入

sudo mongod

或者如果要永久解决此问题,请尝试将 rwx 权限授予 /data/db 文件夹

 chmod +rwx data/

这些都不是一个好主意。第一个可能使系统更容易受到安全漏洞的攻击。第二个可能允许非特权用户篡改您的 mongo 数据库

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅