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

Wil*_* Hu 47 macos mongodb

我今天更新到了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 > 
Run Code Online (Sandbox Code Playgroud)

我试图用安装MongoDB brew

brew install mongodb

?  /Users/william > brew install mongodb
Updating Homebrew...
Error: mongodb: unknown version :mountain_lion
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

kev*_*adi 56

这是主要错误:

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

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

% sudo mkdir -p /data/db
mkdir: /data/db: Read-only file system
Run Code Online (Sandbox Code Playgroud)

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

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

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

mongod --dbpath ~/data/db
Run Code Online (Sandbox Code Playgroud)

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

替代方法

一种替代方法是通过利用macOS上的在MacOS安装MongoDB Community Edition中的说明进行操作brew

brew tap mongodb/brew
brew install mongodb-community
Run Code Online (Sandbox Code Playgroud)

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

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

要运行,mongod您可以:

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

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

    brew services start mongodb-community
    
    Run Code Online (Sandbox Code Playgroud)

  • @MadhavanSundararaj 如果你想通过在 bash 中输入 `mongod` 来运行 `mongodb --dbpath ...`,你可以使用像 `alias mongod='mongod --dbpath ...'` 这样的别名,并将该别名放入你的`bashrc`。这不是最干净的解决方案,但它可能适合您的目的。 (3认同)
  • @MadhavanSundararaj 对于 `zsh` 或任何其他 shell,您需要将别名放在该 shell 的 rc 文件下。对于“zsh”,它是“~/.zshrc”。确保您在创建别名时也遵循 shell 的语法。 (2认同)

Mar*_*ijk 43

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

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

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

sudo mv /Users/Shared/Relocated\ Items/Security/data ~/
Run Code Online (Sandbox Code Playgroud)

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

由您自己来创建别名

  • 我差点疯了,升级Catalina可能会删除我的所有数据。感谢您救我脱离疯狂! (4认同)
  • 非常感谢您保存了我的一天,可以在MacOS Catalina上工作 (2认同)
  • 为我工作,这是更好的解决方案。 (2认同)

Tol*_*ide 14

Kevinadi已经正确地解决了这个问题,但是我是这样解决问题的:

安装 mongodb-community 后

  1. sudo mkdir -p /System/Volumes/Data/data/db (创建 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 的文章非常有用