升级到Mac OS 10.15(Catalina)后,MongoDB找不到数据目录


61

我今天更新到了MacOS 10.15(Catalina)。当我mongod在终端中运行时,找不到/data/db目录:

  /Users/william > mongod
2019-10-08T17:02:44.183+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] MongoDB starting : pid=43162 port=27017 dbpath=/data/db 64-bit host=Williams-MacBook-Pro-6.local
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] db version v4.0.3
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] git version: 7ea530946fa7880364d88c8d8b6026bbc9ffa48c
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] allocator: system
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] modules: none
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] build environment:
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten]     distarch: x86_64
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] options: {}
2019-10-08T17:02:44.211+0800 I STORAGE  [initandlisten] exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating
2019-10-08T17:02:44.211+0800 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2019-10-08T17:02:44.211+0800 I NETWORK  [initandlisten] removing socket file: /tmp/mongodb-27017.sock
2019-10-08T17:02:44.211+0800 I CONTROL  [initandlisten] now exiting
2019-10-08T17:02:44.211+0800 I CONTROL  [initandlisten] shutting down with code:100
  /Users/william > 

我试图用安装MongoDB brew

brew install mongodb

  /Users/william > brew install mongodb
Updating Homebrew...
Error: mongodb: unknown version :mountain_lion

有什么帮助吗?

Answers:


91

这是主要错误:

initAndListen中的异常:NonExistentPath:找不到数据目录/ data / db。

Catalina发生了令人惊讶的更改:它不允许更改根目录(在论坛主题中也对此进行了讨论):

% sudo mkdir -p /data/db
mkdir: /data/db: Read-only file system

不幸的是,除了在Catalina功能中的简短提及之外,这在Apple的Catalina发行说明中并未明确说明

macOS Catalina在专用的只读系统卷中运行

由于该目录/data/db被编码为MongoDB默认目录,因此一种解决方法是指定一个dbpath不在根目录上的目录。例如:

mongod --dbpath ~/data/db

这会将MongoDB的数据放在您的主目录中。只要确保该路径~/data/db实际存在。

替代方法

另一种方法是通过利用macOS上的在macOS安装MongoDB社区版中的说明brew

brew tap mongodb/brew
brew install mongodb-community

默认情况下,这将创建一些其他文件:

  • 配置文件(/usr/local/etc/mongod.conf)
  • 日志目录路径(/ usr / local / var / log / mongodb)
  • 数据目录路径(/ usr / local / var / mongodb)

要运行,mongod您可以:

  • 从命令行手动运行命令(为方便起见,可以使用别名):

    mongod --config /usr/local/etc/mongod.conf
  • 使用来将MongoDB作为服务运行brew services。请注意,这会将MongoDB作为独立节点(而不是副本集)运行,因此取决于oplog的功能(例如changestream)将无法工作,除非您修改mongod配置文件:

    brew services start mongodb-community

感谢您的回答,是否有任何方法可以在bash_profile中配置dbpath?因此,无需每次都使用数据库路径运行mongod。
Madhavan Sundararaj,

我想在更新之后,操作系统删除了mongodb下存在的/ data / db文件夹
Madhavan Sundararaj

1
@MadhavanSundararaj如果要mongodb --dbpath ...通过仅输入mongodbash 来运行,则可以使用like之类的别名alias mongod='mongod --dbpath ...'并将其放入您的中bashrc。这不是最干净的解决方案,但可以满足您的目的。
kevinadi

最新的macOS是否使用zsh?如果是这样,它是否仍使用.bashrc。由于上述建议的别名未按预期工作
Madhavan Sundararaj

1
@MadhavanSundararaj zsh或任何其他外壳,您需要将别名放在该外壳的rc文件下。因为zsh~/.zshrc。确保在创建别名时也遵循外壳程序的语法。
kevinadi

60

安装Catalina之后,您的桌面上可能会有一个名为的文件夹Relocated Items。您可以在data/db文件夹内找到该文件Security夹。

我所要做的只是移动Security/data/dbdata/db然后将其放在我的主文件夹中。

您可以使用Finder应用程序或终端通过运行以下命令来执行此操作:

sudo mv /Users/Shared/Relocated\ Items/Security/data ~/

在那之后运行: mongod --dbpath ~/data/db

由您自己来创建别名


6
我差点疯了,升级Catalina可能会删除我的所有数据。感谢您救我脱离疯狂!
亚当·布贝拉

1
谢谢@MarnixHarderwijk,它对我有用。
Zeeyed

2
非常感谢你救了我的一天,适用于MacOS的卡特琳娜
AFR

当我运行mongod命令时,我得到:无法打开“ mongod”,因为无法验证开发人员。
拉兹


7

Kevinadi已经对这个问题做到了公正,但是这就是我如何解决这个问题:

安装mongodb-community之后

  1. sudo mkdir -p /System/Volumes/Data/data/db (创建数据/数据库文件夹)
  2. sudo chown -Rid -un /System/Volumes/Data/data/db(授予权限)
  3. mongod --dbpath=/System/Volumes/Data/data/db (更改mongodb的dbpath)
  4. mongod (运行良好)

我发现有关安装mongodb的这篇文章非常有用


尝试解决问题1天后,这有所帮助!本文没有提到更改dbpath,这就是我所缺少的
mhlavacka




0

Mac版本的Catalina使得根文件夹不再可写。

Brew拥有mongodb的更新版本,以使用新路径(它会自行创建), /usr/local/var/mongodb并且按照以下说明将解决此问题:

安装更新的mongodb-community-edition的指南

brew install mongodb-community@VERSION 修复的第一个版本是4.2


上面的命令应该用sudo执行。然后,将遵守dbPath配置。否则,/data/db无论配置如何,mongo仍默认为。
Matt Hagemann
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.