升级到Mac OS 10.15(Catalina)后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 > 

我试着用brew:安装MongoDB

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

有什么帮助吗?

这是主要错误:

initAndListen:NonExistentPath:未找到数据目录/Data/db中的异常。,终止

Catalina有一个惊人的变化:它不允许更改根目录(这也在论坛线程中讨论过):

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

不幸的是,这一点在苹果的Catalina发布说明中没有明确说明,只是在Catalina功能中简要提及:

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

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

mongod --dbpath ~/data/db

这将把MongoDB的数据放在您的主目录中。只需确保路径~/data/db确实存在即可。

替代方法

另一种方法是按照在macOS上安装MongoDB Community Edition的说明,利用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
    
  • 使用brew services将MongoDB作为服务运行。请注意,这将作为一个独立的节点(而不是副本集)运行MongoDB,因此依赖于oplog的功能(例如changestreams)将无法工作,除非您修改mongod配置文件:

    brew services start mongodb-community
    

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

我所要做的就是移动Security/data/db,特别是data/db,并将其放在我的主文件夹中。

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

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

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

由您创建别名

Kevinadi已经公正地回答了这个问题,但这就是我解决问题的方法:

安装mongodb社区后

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

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

找到了一个技巧。。。从目录中删除~/data/db整个文件夹然后重新创建一个新的,但不要使用mkdir-p/data/db相反,只需使用触控板即可使用系统方式创建文件夹

这对我有效

以下是对我有效的方法:

  1. 在某处创建一个文件夹,例如Development/mongodb/data/db
  2. 打开mongod.conf文件,并将storage.dbPath值更新为新创建的文件夹路径

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

Brew有一个更新版本的mongodb来使用一个新的路径(它自己创建的)/usr/local/var/mongodb,按照以下说明可以解决这个问题:

安装更新的mongodb社区版指南

brew install mongodb-community@VERSION,其中具有修复的第一个版本是4.2

我在BigSur中也遇到过同样的问题,不幸的是,Relocated Items文件夹中没有任何类似于我的MongoDB转储的内容。我决定按数据库名称搜索Finder,因为dump包含具有数据库名称的文件夹。我的垃圾堆原来就在这里

Macintosh HD/System/Volumes/Mintosh HD/data/db

据我所知,在操作系统更新期间,转储被偷偷地移动了,因为它以前在根目录,现在操作系统不允许写入根目录。

如果您使用相对目录引用,您的docker映像将能够找到您的目录,无论它们在哪里~/Datadesk将把您的Mac Desktop目录映射到您的映像中,作为/DataDesktop。

docker run -it -v ~/Desktop:/Desktop r-base bash

转到~/Users/Shared文件夹。在这里,你会发现一个名为"重新定位的项目"的文件夹,在里面你可以找到一个"数据"文件夹。这个"数据文件夹"在"/data/db"中包含您的mongodb数据库。

现在,复制这个"数据"文件夹并将其粘贴到Users/<name-of-your-user-account-with-the-home-icon">中。

现在打开zsh终端并运行mongod --dbpath ~/data/db,然后在一个单独的选项卡中打开一个新的shell,然后键入mongo打开mongo shell,就可以开始了。

请记住每次运行mongod时使用mongod --dbpath ~/data/db或创建别名。

对我来说,Catalina升级后,它移到了与上述不同的文件夹。如果有人找到相同的路径,您可以使用以下解决方案。

cp /Users/Shared/Previously Relocated Items/Security/data ~
mongod --dbpath ~/data/db

这样,当你使用访问mongoshell时,你可以看到你的旧数据库和集合

mongo
show dbs

最新更新