【问题标题】:Unable to create/open lock file: /data/mongod.lock errno:13 Permission denied无法创建/打开锁定文件:/data/mongod.lock errno:13 Permission denied
【发布时间】:2013-03-05 16:44:38
【问题描述】:

如何让 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

【问题讨论】:

  • 看起来 mongod 上次运行时严重关闭,无法清理它创建的 mongod.lock 文件。该文件的存在是为了防止多个 mongod 实例处理该文件。如果您删除文件并尝试再次运行 mongod,您应该没有问题
  • 查看更新的问题。如果删除锁定文件,同样的问题
  • 看来还是lockfile的问题,lockfile所在目录的权限是什么? TBH 我只在 2 种情况下看到过这种情况:1)锁定文件已经存在,2)mongod 没有在所需位置创建锁定文件的权限。
  • 您应该确保 mongo 用户也可以访问数据目录,chown mongodb:mongodb on /var/lib/monogdb

标签: mongodb


【解决方案1】:

我用这个方法解决问题:

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
  • 这实际上是做什么的?它确实有效,但很想了解:)
【解决方案2】:

我在 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”。

  1. 首先我运行sudo service mongodb stop
  2. 然后我使用ls -la 查看分配给/var/lib/mongodb(现有路径)的组和所有者mongodb,并将/data/db(新路径)更改为chownchgrp 以匹配。 (例如:sudo chown -R mongodb:mongodb /data/db
  3. 然后我将etc/mongodb.conf中的路径更新为/data/db,并删除了/var/lib/mongodb目录下的旧mongo文件。
  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

【讨论】:

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

就我而言(AWS EC2 实例,Ubuntu)有所帮助:

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

之后一切正常。

【讨论】:

  • 这是最好的答案,很可能是运行 mongod 的用户的权限问题
  • 我们正在将/data/db的所有权更改/转让给USERNAME
【解决方案4】:

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

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

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

【讨论】:

    【解决方案5】:

    我按照本教程在带有 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”。
    【解决方案6】:

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

    我跑了

    killall mongod
    

    其他一切都按预期运行。

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

    【讨论】:

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

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

    【讨论】:

      【解决方案8】:

      截至今天,我试图通过创建/打开锁定文件:/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。干杯!

      【讨论】:

        【解决方案9】:

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

        ps auxw | grep mongo 
        

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

        【讨论】:

          【解决方案10】:

          在我的情况下,删除 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 带有杀死进程的说明:

          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。我相信我的仍然因不当关闭而运行。

          【讨论】:

            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

              我的 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 I CONTROL [initandlisten] dbexit: rc: 100

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

              sudo chown -R mongodb:mongodb /var/lib/mongodb/
              sudo chmod -R 755 /var/lib/mongodb
              
              • 重启服务器

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

              【讨论】:

                【解决方案13】:

                在我的情况下
                在 mongodb 2.6.11 版本中,默认数据库目录是/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`
                【解决方案14】:

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

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

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

                【讨论】:

                  【解决方案15】:

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

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

                  【讨论】:

                    【解决方案16】:

                    在我的情况下,问题是通过删除 log 文件解决的。

                    sudo rm /log/mongod.log
                    

                    虽然错误消息专门针对 lock 文件:

                    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 。
                    【解决方案17】:

                    我杀了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
                    

                    【讨论】:

                      【解决方案18】:

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

                      $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

                      【讨论】:

                        【解决方案19】:

                        我遇到了同样的问题。

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

                        setenforce 0
                        

                        【讨论】:

                          【解决方案20】:

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

                          【讨论】:

                            【解决方案21】:

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

                            【讨论】:

                              【解决方案22】:

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

                              sudo chown -R mongod:mongod /data/db

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

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

                              nohup mongod --dbpath /data/db &

                              或输入:

                              mongod --dbpath /data/db

                              获取输出流

                              【讨论】:

                              • 考虑到这是一个老问题,你的回答并没有添加任何不存在的东西,你应该问问自己它是否有价值......
                              【解决方案23】:

                              对于 CentOS 6.x 上的我来说:

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

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

                              【讨论】:

                                【解决方案24】:

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

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

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

                                【讨论】:

                                  【解决方案25】:

                                  在 Centos 服务器中

                                  这对我有用

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

                                  【讨论】:

                                    【解决方案26】:

                                    有一个类似的错误,通过删除所有记录(在我的情况下是目录journals 和文件mongo.lock...),然后使用sudo lsof -i:27017 检查端口,如果在它上面运行kill &lt;PID of the process&gt;,并尝试再次运行./mongod

                                    【讨论】:

                                      【解决方案27】:

                                      修复:sudo mongod

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

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

                                      【讨论】:

                                      • 不需要以 root 身份运行 mongod,这可能会使系统更容易受到攻击
                                      【解决方案28】:

                                      每次你尝试启动 mongod 时 只需输入

                                      sudo mongod
                                      

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

                                       chmod +rwx data/
                                      

                                      【讨论】:

                                      • 这些都不是一个好主意。第一个可能使系统更容易受到安全漏洞的攻击。第二个可能允许非特权用户篡改您的 mongo 数据库
                                      猜你喜欢
                                      • 1970-01-01
                                      • 2018-07-21
                                      • 1970-01-01
                                      • 2020-12-07
                                      • 2017-02-12
                                      • 2020-12-12
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2018-03-14
                                      相关资源
                                      最近更新 更多