无法创建/打开锁定文件:/data/mongod.lock errno:13权限被拒绝


187

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

我看到mongo在/ data中创建了一个'db'目录,即/ data / 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

1
好像mongod上次运行时严重关闭,无法清理其创建的mongod.lock文件。该文件存在是为了防止多个mongod实例在该文件上工作。如果删除文件并尝试再次运行mongod,则应该没有问题
ACE

2
查看更新的问题。如果删除锁定文件,则会出现同样的问题
坦帕

似乎锁文件仍然存在问题,该锁文件所在的目录具有哪些权限?TBH我仅在2种情况下看到过这种情况:1)锁定文件已经存在,2)mongod没有权限在所需位置创建锁定文件。
ACE 2013年

1
您应该确保mongo用户也可以访问chown mongodb:mongodb on /var/lib/monogdbdata目录。
Hans N. Hjort

Answers:


117

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

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

Mongodb中的路径/etc/mongodb.conf设置为/var/lib/mongodb(主要安装位置并正常工作)。当我更改为/data/db(EBS卷)时,得到的是'errno:13 Permission否认'。

  1. 首先我跑了sudo service mongodb stop
  2. 然后我用ls -la看哪个组和所有者的MongoDB分配/var/lib/mongodb(现有路径),我改变了/data/db(新路),与chownchgrp相匹配。(例如:sudo chown -R mongodb:mongodb /data/db
  3. 然后,我更新的路径etc/mongodb.conf,以/data/db在删除旧的蒙戈文件/var/lib/mongodb目录。
  4. 然后我跑去sudo service mongodb start等了大约一分钟。如果尝试立即连接到27017,将无法连接。
  5. /data/db稍等片刻(EBS量),然后mongo应该放置了日记,mongod.lock,local.ns,local.0等。如果没有sudo service mongodb restart,请稍后再检查。

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

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

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


8
我在这个问题上苦苦挣扎,意识到如果您使用ls -lahZ列出目标文件夹,它将为您提供安全上下文,因此mongo data文件夹的上下文应设置为:“ sudo chcon -R -u system_u -t mongod_var_lib_t / folder / data”,除了明显的权限和user:group组合之外。希望能帮助到你。
jmdiego 2015年

478

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

sudo chown -R mongodb:mongodb /data/db

8
添加一个-R选项,它是完美的:)
Adrien 2014年

7
那是:sudo chown -R id -u/ data / db用于未启动的。:)
rncrtr 2014年

8
事实证明,反引号存在问题。尝试运行sudo chown $USER /data/db而不是原始命令。
Paymahn Moghadasian 2015年

7
这确实是正确的答案。@坦帕,你应该接受这个答案。顺便说一句-您不需要id -U$USER东西。mongo有其自己的用户/组。您可以并且应该对mongodb:mongodb进行硬编码。所以命令很简单sudo chown -R mognodb:mognodb /data/db
Guy mograbi 2015年

11
这实际上是做什么的?它确实有效,但是很想了解:)
zero_cool

81

就我而言(AWS EC2实例,Ubuntu)提供了帮助:

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

之后,一切正常。


6
这是最好的答案,这很可能与运行mongod的用户有关的权限问题
davo 2014年

2
是的,这是最好的答案
Vegan Sv

1
我们将所有权更改/转让/data/dbUSERNAME
Saif'Apr

52

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

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

您可以通过键入找到用户名whoami



10

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

我跑了

killall mongod

其他一切都按预期运行。

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


从字面上看,这是最短的答案,也是无数小时后解决了我问题的唯一答案……谢谢!
moomoochen '18 -10-9

很高兴它有所帮助!:)希望有一种方法可以帮助人们更轻松地找到此答案。
Venky Soorisetty

7

从今天开始,我尝试遍历创建/打开锁定文件:/data/db/mongod.lock errno:13权限被拒绝Mongod实例是否已经在运行?,终止,并尝试了上述所有答案:解决了这个问题,因此通过添加没有解决任何问题

须藤chown -R mongodb:mongodb / data / db

除非我通过以下方式将当前用户权限添加到位置路径中

须藤chown $ USER / data / db

希望这对某人有帮助。另外,我刚刚在pi上安装了Mongo DB。干杯!


这是问题的实际解决方案
Sahil Nagpal

6

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

ps auxw | grep mongo 

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


6

对于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


5

就我而言,删除mongodb.lock文件不是问题。我这样做了,并收到有关正在使用的端口的错误:[initandlisten] listen():bind()失败errno:98地址已用于套接字:0.0.0.0:27017。我在这里找到了另一种解决方案:无法通过杀死进程的说明启动mongodb本地服务器

  1. 从netstat找出哪个进程正在运行mongodb端口(27017)

    sudo netstat -tulpn | grep :27017

    输出将是:tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1412 / mongod

  2. 终止适当的过程。

    sudo kill 1412 (将1412替换为在步骤1中找到的进程ID)

而且我能够再次成功启动mongodb。我相信由于不当关闭我的机器仍在运行。


4

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


3

我的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
  • 重新启动服务器

修复了此问题,尽管我意识到可能不太安全(我是我自己的开发箱),但是在更改数据库和身份验证后还是有所改进。


2

在Mycase中,
在mongodb版本2.6.11中,默认的databse 目录为/var/lib/mongodb/

  1. $ sudo chown -R id -u/ var / lib / mongodb /

  2. $ sudo chown -R id -u/var/lib/mongodb/mongod.lock

  3. $ sudo /etc/init.d/mongod stop

  4. $ sudo /etc/init.d/mongod start


应该是“ id -u”
marcus,

2

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

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

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


1

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

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


1

就我而言,该问题已通过删除日志文件解决。

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。
基思·约翰·哈奇森

1

在杀死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

1

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

$ sudo mkdir -p /数据/数据库

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

$ sudo chown -R id -u/数据/数据库

然后开始mongo ...

$ mongod



0

难道ls -la要知道在/ var /日志/的MongoDB的用户和组。然后,sudo chown -R user:group /data/db 现在运行sudo service mongodb start。检查状态sudo service mongodb status



0

您可以通过以下方式尝试。1号

须藤chown -R mongod:mongod / data / db

但这有时是没有用的。2号 如果上述方法没有用,则可以尝试执行以下操作:

mkdir / data / db#作为数据库存储路径

nohup mongod --dbpath / data / db和

或输入:

mongod --dbpath /数据/ db

获得输出流


考虑到这是一个古老的问题,您的答案不会添加任何尚不存在的内容,您应该问问自己,它是否有价值……
Nic3500

0

对我而言,在CentOS 6.x上:

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

我已经设置自定义db-path/etc/mongod.conf




0

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


-2

固定: sudo mongod

我有同样的问题,以sudo权限运行mongod可以解决此问题。来自Windows环境,我只是mongod用来启动守护程序,看起来我们需要超级用户特权才能访问/ data / db。

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


运行的mongod作为root是没有必要的,并且可以使系统更加脆弱战功
qbert220

-2

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

sudo mongod

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

 chmod +rwx data/

这些都不是个好主意。第一种可能会使系统更容易受到安全漏洞的攻击。第二种可能允许无特权的用户篡改您的mongo数据库
qbert220 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.