【问题标题】:Mongod complains that there is no /data/db folderMongod 抱怨没有 /data/db 文件夹
【发布时间】:2011-10-30 23:56:54
【问题描述】:

我今天第一次使用我的新 Mac。我一直在关注 mongodb.org 上的入门指南,直到创建 /data/db 目录的步骤。顺便说一句,我使用了自制路线。

所以我打开一个终端,我想我在你所说的主目录中,因为当我执行“ls”时,我会看到桌面应用程序电影音乐图片文档和库的文件夹。

所以我做了一个

mkdir -p /data/db

首先,它说权限被拒绝。我一直在尝试不同的东西半个小时,最后:

mkdir -p data/db

工作。当我“ls”时,确实存在一个数据目录并嵌套在其中一个db文件夹。

然后我启动了 mongod,它抱怨找不到数据/db

我做错了吗?

现在我已经完成了

sudo mkdir -p /data/db

当我执行“ls”时,我确实看到了数据目录和数据库目录。但是在 db 目录中,里面绝对没有任何东西,当我现在运行 mongod 时

Sun Oct 30 19:35:19 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Sun Oct 30 19:35:19 dbexit: 
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close listening sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to flush diaglog...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: waiting for fs preallocator...
Sun Oct 30 19:35:19 [initandlisten] shutdown: lock for final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: closing all files...
Sun Oct 30 19:35:19 [initandlisten] closeAllFiles() finished
Sun Oct 30 19:35:19 [initandlisten] shutdown: removing fs lock...
Sun Oct 30 19:35:19 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Sun Oct 30 19:35:19 dbexit: really exiting now

编辑 获取错误消息

sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

谢谢大家!

【问题讨论】:

  • “无效参数”意味着 mongo 用户的符号名称在您的系统上是不同的——您可能使用不同的包或安装机制来安装 MongoDB。您应该检查 /etc/passwd 和 /etc/group 文件中的 mongo 用户 grep mongo /etc/passwd /etc/group 的符号名称(或 uid/gid)。如果这不起作用,请通过检查目录 ls -ld /var/lib/mongo 的所有者来检查名称。或查看 uid/gid 执行此操作:ls -lnd /var/lib/mongo。在我的情况下drwxr-xr-x. 6 *487 480* 4096 Sep 20 2011 ... - 这意味着使用 487:480 作为参数
  • 使用 UID/GID 与使用符号名称同义。例如只需将 'mongod:mongod 替换为您使用上述方法找到的 uid/gid 数字即可。
  • 既然我们知道如何正确添加这个目录(data/db),为什么一开始没有把这个目录包含在安装中?
  • 如果您刚刚升级到 MacOS 10.15,这个答案可能会有所帮助:stackoverflow.com/questions/58283257/…
  • 如果您有最新版本的MAC:随着新的macOS Catalina更新,文件夹“/data/db”变为只读,您无法修改它。按照此过程在另一个文件夹中创建数据库:1)更改 mongod 目录:sudo mongod --dbpath /System/Volumes/Data/data/db 2)给它一个别名:alias mongod="sudo mongod --dbpath/System /Volumes/Data/data/db"

标签: macos mongodb


【解决方案1】:

您在错误的位置创建了目录

/data/db 表示它直接在 '/' 根目录下,而您创建的 'data/db'(没有前导 /)可能只是在另一个目录中,例如 '/root' 主目录。

您需要以 root 身份创建此目录

您需要使用 sudo ,例如sudo mkdir -p /data/db

或者你需要做su -成为超级用户,然后用mkdir -p /data/db创建目录


注意:

MongoDB 还有一个选项,您可以在另一个位置创建数据目录,但这通常不是一个好主意,因为它只是稍微复杂化了诸如数据库恢复之类的事情,因为您总是必须手动指定 db-path。我不建议这样做。


编辑:

您收到的错误消息是“无法创建/打开锁定文件:/data/db/mongod.lock errno:13 Permission denied”。您创建的目录似乎没有正确的权限和所有权—— 它需要对运行 MongoDB 进程的用户是可写的。

要查看“/data/db/”目录的权限和所有权,请执行以下操作: (这就是权限和所有权的样子)

$ ls -ld /data/db/
drwxr-xr-x 4 mongod mongod 4096 Oct 26 10:31 /data/db/

左侧“drwxr-xr-x”显示用户、组和其他人的权限。 'mongod mongod' 显示谁拥有该目录,以及该目录属于哪个组。 在这种情况下,两者都被称为“mongod”。

如果您的“/data/db”目录没有上述权限和所有权,请执行此操作

首先检查您的 mongo 用户拥有的用户和组:

# grep mongo /etc/passwd
mongod:x:498:496:mongod:/var/lib/mongo:/bin/false

您应该在 /etc/passwd 中有一个 mongod 条目,因为它是一个守护进程。

sudo chmod 0755 /data/db
sudo chown -R 498:496 /data/db    # using the user-id , group-id

您还可以使用用户名和组名,如下所示: (它们可以在 /etc/passwd 和 /etc/group 中找到)

sudo chown -R mongod:mongod /data/db 

应该让它工作..

在下面的cmets中,有人用过这个:

sudo chown -R `id -u` /data/db
sudo chmod -R go+w /data/db

sudo chown -R $USER /data/db 
sudo chmod -R go+w /data/db

缺点是 $USER 是一个具有登录 shell 的帐户。 出于安全原因,理想情况下,守护进程不应该有 shell,这就是为什么您在上面的密码文件的 grep 中看到 /bin/false 的原因。

查看这里以更好地理解目录权限的含义:

http://www.perlfect.com/articles/chmod.shtml

也许还可以查看您可以通过 Google 找到的教程之一:“UNIX 初学者”

【讨论】:

  • 尝试执行ls -ld /data/ls -ld /data/db/ .. 您将看到左侧列出的目录权限,然后是所有权,然后是目录名称。您应该确保目录可由运行 MongoDB 的用户 ID 写入。
  • @Tilo 是的,我已经完成了。第一个,chmod 没问题,第二个说“chown: mongod: Invalid argument”
  • 这是整个线程正是我正在经历的。但我似乎也无法理解 mongo 的用户 ID 和组 ID 在我的系统上是什么,也无法在任何地方找到任何文档。我被困在 chown mongod:mongod 部分,因为它返回了 invalid arguement
  • 更新我选择了 sudo touch /data/db/mongod.locksudo chmod 0777 /data/db/mongd.lock 。她马上就开始了。
  • 运行 sudo chown -R `id -u` /data/dbsudo chown -R $USER /data/db 而不是 sudo chown mongod:mongod /data/db 对我有用
【解决方案2】:

得到与 Nik 相同的错误后

chown: id -u: 无效参数

我发现这显然是由于使用了错误类型的引号引起的(应该是反引号Ubuntu Forums

我只是用了

sudo chown $USER /data/db

作为替代方案,现在 mongod 拥有它需要的权限。

【讨论】:

  • 如果有人觉得它有用:我有同样的问题,但错误信息有点不同(说当我尝试 chown mongod:mongod 时组 'mongod' 不存在)->但是,使用 chown $USER 对我有用,谢谢...
  • 我必须为此添加 -R。 "sudo chown -R $USER /data/db"
【解决方案3】:

这对我有用,在 cmets 中找到:

sudo chown -R $USER /data/db

【讨论】:

  • 也适合我。在我的 OSX 上通过 homebrew 安装 mongo 不会添加 mongod 用户和组。
【解决方案4】:

创建文件夹。

sudo mkdir -p /data/db/

授予自己对该文件夹的权限。

sudo chown `id -u` /data/db

然后你可以在没有sudo 的情况下运行mongod。适用于 OSX Yosemite

【讨论】:

  • 尝试重新启动 mongod 服务,而不是创建新目录。例如:- service mongod restart
  • bogdanmac:~ iliebogdanbarbulescu$ sudo chown `id -u` /data/db chown: /data/db: No such file or directory
【解决方案5】:

为了修复 OS X 上的错误,我重新启动并停止了服务: $ brew services restart mongodb $ brew services stop mongodb

然后我运行mongod --config /usr/local/etc/mongod.conf,问题就消失了。

好像是升级mongodb homebrew包后出现的错误。

【讨论】:

    【解决方案6】:

    如果您在不带参数的情况下运行 mongo,则假定您在生产机器上运行,因此它使用默认位置。

    使用您自己的数据库(开发或只是一个不同的):

    ./bin/mongod --dbpath ~/data/db
    

    【讨论】:

    • 这是否解释了为什么它不会使用 /etc/mongod.conf 中声明的设置?在 ubuntu 16.04 上安装 3.6.5 时遇到问题。
    • 尝试以详细 (-v) 模式启动或显式强制配置 (--config):docs.mongodb.com/manual/reference/program/mongod 如果您使用 apt-get 安装,请使用 service mongod status/start/stop
    • 我确实查看了 mongo 日志。它一直在说缺少 /data/db 目录正在阻止启动。最终找到了您的答案,这似乎是问题的原因?
    • 这也适用于在 Windows 上的 Linux 子系统中使用 MongoDB 时,无法在 fs 根目录下实际创建 /data/db。
    【解决方案7】:

    在以 YOUR_USER_NAME 和 staff 为组的 Mac 上通过 brew 安装

    sudo mkdir -p /data/db
    sudo chmod +x+r+w /data/db/
    sudo touch /data/db/mongod.lock
    sudo chown YOUR_USER_NAME:staff /data/db
    sudo chmod +x+r+w /data/db/mongod.lock
    sudo chown YOUR_USER_NAME:staff /data/db/mongod.lock
    

    【讨论】:

    • @MarkusWMahlberg 谢谢。它是那些感觉很奇怪但有效的事情之一。那么谁应该是该文件的所有者和组?
    • 这取决于您的发行版。查看/etc/passwd 的用户名——该组很可能是相同的。通常是mongomongodb
    • @MarkusWMahlberg 好的 - 我现在修复了它 - 通过 brew 安装时它不会创建用户和组,所以我只是将它设置为我自己的用户名。看看现在是否更安全。谢谢
    • 谢谢。使用 brew 在 mac 上开发时,这可以解决问题。如果您只是在 mongodb 中使用测试数据,则不需要更高的安全性。 @MarkusWMahlberg 在 OS X 上,运行 mongod 的用户是 YOUR_USER_NAME,如果你只是用“mongod &”启动它。
    【解决方案8】:

    如果您使用 Mac 并通过 Homebrew 运行 Catalina 并安装了 Mongodb,您只需输入此命令即可开始。

    brew services start mongodb-community
    

    【讨论】:

      【解决方案9】:

      您的命令将在当前文件夹中创建目录结构,而不是您计算机的根目录(这是缺少的 / 所在)。

      第一个命令是对的,但是因为你试图在/ 中创建一个文件夹,这是一个受保护的目录,你需要在它前面加上sudo,它是“superuser do”的缩写。然后系统会要求您输入密码。

      所以完整的命令是:

      $ sudo mkdir -p /data/db
      

      【讨论】:

        【解决方案10】:

        我在现有的 Mongodb 设置中遇到了这个问题。我仍然不确定它为什么会发生,但由于某种原因,Mongod 进程找不到 mongod.config 文件。 因为它找不到配置文件,所以它试图在 /data/db 中找到数据库文件,这是一个不存在的文件夹。 但是,配置文件仍然可用,因此我确保该进程对配置文件具有权限并使用 --config 标志运行 mongod 进程,如下所示:

        mongod --config /etc/mongod.conf
        

        在配置文件本身我有这个设置:

        storage:
          dbPath: /var/lib/mongodb
        

        这就是进程如何再次找到真正的 DB 文件夹的方式。

        【讨论】:

        • 我确认它发生在我身上。我们可以设置 --dbpath=/var/lib/mongodb,而不是配置文件。我虽然丢失了所有数据,但它仍然存在。
        【解决方案11】:

        我做到了

        brew install mongodb
        

        在 2018 年 2 月 1 日,这给了我 mongodb 版本 3.6.2。

        在上面answer from orluke的提示下,我试了一下

        $ brew services restart mongodb
        

        一切都开始生机勃勃。我的mongoose.createConnection() 电话做了我想要的。 GUI MongoDB Compass,社区版本,将连接。我用 Compass 查看了local.startup_log 集合。那有一个文档,我刚刚启动 mongoDB 服务的日志,并且有

        cmdLine:Object
            config:"/usr/local/etc/mongod.conf"
        

        确实有这样一个文件:

        $ more /usr/local/etc/mongod.conf
        systemLog:
          destination: file
          path: /usr/local/var/log/mongodb/mongo.log
          logAppend: true
        storage:
          dbPath: /usr/local/var/mongodb
        net:
          bindIp: 127.0.0.1
        

        还有一个/usr/local/var/mongodb 目录,里面有很多不知名的文件。所以这似乎是安装现在的工作方式。

        我不确定brew services restart 是否将服务设置为在登录时运行。所以我做到了

        brew services stop mongodb
        brew services start mongodb
        

        并希望在重新启动后再次启动它。而且,确实如此。事实上,现在,我认为初始安装后正确的做法是

        brew services start mongodb
        

        这应该启动服务并在重新启动后重新启动它。

        【解决方案12】:

        我只是想在此指出,如果您尝试此操作并遇到 mkdir: /data/db: Read-only file system,请查看此评论,这对我有帮助:https://stackoverflow.com/a/58895373

        这样,如果有人在这个答案上并且将 Control F 设为“只读”,他们就会看到这个

        【讨论】:

          【解决方案13】:

          您正在尝试创建一个您没有 root 访问权限的目录。

          为了测试 mongodb,我只使用我的用户目录中的一个目录,例如:

          cd
          mkdir -p temp/
          mongod --dbpath .
          

          这将从您当前的工作目录在 temp/ 中创建一个 mongo 数据库

          【讨论】:

            【解决方案14】:

            我通过使用我的窗口管理器创建 /data/db 文件夹解决了这个完全相同的问题。我一开始尝试通过终端进行操作,为了在根目录中创建一个文件夹,我不得不使用 sudo。

            我刚刚使用 Finder 进入根目录并使用“新建文件夹”创建了一个新文件夹。完全为我工作。

            注意:我使用的是 OSX。

            【讨论】:

              【解决方案15】:

              您需要创建 /data/db ...这是一个名为 /data/ 在您的根目录(即 >/) 和其中名为 /db/ ...

              的子文件夹

              您收到权限错误,因为您需要使用 sudo 在 MacOS 的根目录中创建目录,sudo 允许您以管理员身份运行命令。

              所以,改为运行它...

              $ sudo mkdir -p /data/db
              

              这将提示您输入密码,它与您用于更改系统设置的密码相同(当您尝试在 ecample 的系统偏好设置中更改内容时打开的小对话框),并且可能与您用于登录的密码相同。

              【讨论】:

                【解决方案16】:

                在根目录下创建目录

                sudo mkdir -p /data/db
                

                现在更改所有者

                sudo chown -R $USER /data
                

                一切顺利!

                mongod
                

                不要使用sudo mongod,你不需要输入everythime密码,但对于实际项目你应该使用sudo mongod,不要给普通用户权限!

                【讨论】:

                  【解决方案17】:

                  只是一个简短的说明:

                  如果您尝试在不首先更改权限的情况下运行 mongod,您可能会在 /data/db 目录中有一个 mongod.lock 文件(和一些其他文件)。即使您更改了 /data/db 目录的权限以授予 $USER 访问权限,您仍将继续收到“无法创建/打开锁定文件:/data/db/mongod.lock errno:13 Permission denied “ 错误。运行 ls -al /data/db,您可能会看到单个文件的权限仍然设置为用户的 root,而不是您的 $USER。您应该删除 mongod.lock 文件以及其他文件。然后当你再次运行 mongod 时,一切都应该正常了,你可以通过再次运行 ls -al 来验证文件权限是否与目录权限匹配。

                  【讨论】:

                  • 这是一个很好的说明。我没有锁定文件,但我确实需要更改我的数据和 db 文件夹的所有者。
                  【解决方案18】:

                  MongoDB 可能会混淆 dbPath 文件夹。

                  当您运行 mongod 而不运行 dbpath 时,默认路径为 /data/db

                  但是,当您将其作为服务启动时,例如systemctl start mongod 然后读取配置文件,通常是 /etc/mongod.cfg,在这个配置文件中默认是

                  Platform Package Manager Default storage.dbPath
                  RHEL / CentOS and Amazon yum /var/lib/mongo
                  SUSE zypper /var/lib/mongo
                  Ubuntu and Debian apt /var/lib/mongodb
                  macOS brew /usr/local/var/mongodb

                  因此,您的 MongoDB 偶然会根据您启动服务的方式尝试访问不同的数据文件夹。

                  【讨论】:

                    【解决方案19】:

                    我在尝试启动 mongodb 时不断收到以下错误。

                    "shutting down with code:100" 
                    

                    我正在使用以下命令:

                    ./mongod --dbpath=~/mongo-data
                    

                    对我来说,解决方法是我不需要“=”符号,这是导致错误的原因。所以我做到了

                    ./mongod --dbpath ~/mongo-data
                    

                    只是想把它扔出去,因为错误绝不表明这是问题所在。我几乎删除了 ~/mongo-data 目录的内容,看看是否有帮助。很高兴我记得 cli args 有时不使用“=”符号。

                    【讨论】:

                      【解决方案20】:

                      到目前为止,我还曾经认为我们需要创建 /data/db 文件夹来启动 mongod 命令。

                      但最近我尝试使用 service 命令启动 mongod,它对我有用,不需要创建 /data/db 目录。

                      service mongod start
                      

                      要查看mongod的状态,可以运行以下命令。

                      service mongod status
                      

                      【讨论】:

                        【解决方案21】:

                        这个解决方案解决了我的问题

                        1. 创建一个目录

                          sudo mkdir -p /data/db

                        2. 这将创建一个名为 db 的目录,然后尝试从命令开始

                          sudo mongod

                        如果您在启动 mongod 时遇到其他错误或问题,您可能会发现问题为

                        无法设置监听器:SocketException:地址已在使用中 如果您发现另一个错误,则必须通过在终端键入 as 来终止 mongod 的运行进程

                        ps ax | grep mongod
                        sudo kill ps_number
                        

                        并找到 mongod 运行端口并终止该进程。 另一种方法是在启动 mongod 时创建一个特定的端口

                        sudo mongod --port 27018
                        

                        【讨论】:

                          【解决方案22】:

                          从 MongoDB 4.4 开始,MongoDB 数据库工具现在与 MongoDB 服务器分开发布。

                          您需要下载:https://www.mongodb.com/try/download/database-tools?tck=docs_databasetools

                          然后将所有文件复制到/usr/bin 并且所有命令行都将可用。

                          【讨论】:

                            【解决方案23】:

                            Mongodb 在运行 mongod 时会在设备的根文件夹中查找 ~/data/db 文件夹作为 db 的路径。

                            我通过运行mkdir ~/data 创建一个~/data 文件夹解决了这个问题

                            在根文件夹中输入ls,检查数据文件夹是否存在。然后导航到数据文件夹并仔细检查pwd 应该给你/Users/username/data

                            然后运行这个命令创建一个 mongodb db 路径 sudo mongod --dbpath=/Users/username/data

                            这是为我做的,当我运行mongod

                            【讨论】:

                              【解决方案24】:

                              在终端上输入“id”以查看您可以提供的可用用户 ID, 然后只需输入

                              "sudo chown -R idname /data/db"

                              这对我有用! 希望这能解决您的问题。

                              【讨论】:

                                【解决方案25】:

                                在 MongoDB 的最新版本中,我有 3.2.10,它默认存储到

                                /var/lib/mongodb

                                【讨论】:

                                • 在这些情况下运行 mongod --dbpath /var/lib/mongodb 会有所帮助
                                【解决方案26】:

                                到目前为止,Tilo 的答案一直对我有用:

                                sudo chown -R 126:135 /data/db 
                                

                                我不得不使用:

                                sudo chown -R $USER /data/db
                                

                                【讨论】:

                                  【解决方案27】:

                                  在(重新)安装工具包后,我在 Windows 10 设备上遇到了类似的错误;

                                  initAndListen 中的异常:NonExistentPath: 未找到数据目录 C:\data\db\。,终止

                                  解决方案 类似于对 linux 系统的解释:只需创建文件夹即可启动 mongod.exe(mongoDB 服务器)。

                                  我想我可能会把它留给那些最终在 Windows 设备上使用相同搜索词的人。

                                  【讨论】:

                                    【解决方案28】:

                                    有一种非常愚蠢的方法可以解决这个问题,这是我首创的:

                                    1) 暂时不要安装 mongo 2)回来,服务器没有运行 3) 尝试启动它,但这次不要使用 sudo 4) mongo 找不到 data/db/ 因为现在它在用户主目录而不是 su 主目录中查找

                                    是的,它确实很愚蠢,但是如果您使用系统已经有一段时间了,它可能会绊倒您。

                                    简短回答:确保使用相同的隐含主目录运行 mongo

                                    【讨论】:

                                      猜你喜欢
                                      • 2018-05-18
                                      • 2013-05-13
                                      • 1970-01-01
                                      • 2013-10-25
                                      • 2018-02-02
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2017-05-20
                                      相关资源
                                      最近更新 更多