MongoDB kann nach dem Upgrade auf Mac OS 10.15 (Catalina) kein Datenverzeichnis finden

61

Ich habe heute auf MacOS 10.15 (Catalina) aktualisiert. Wenn ich mongodim Terminal laufe , kann es das /data/dbVerzeichnis nicht finden :

  /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 > 

Ich habe versucht, MongoDB zu installieren mit brew:

brew install mongodb

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

Irgendeine Hilfe?

William Hu
quelle

Antworten:

91

Dies ist der Hauptfehler:

Ausnahme in initAndListen: NonExistentPath: Datenverzeichnis / data / db nicht gefunden., wird beendet

Catalina hat eine überraschende Änderung: Es werden keine Änderungen am Stammverzeichnis zugelassen (dies wurde auch in einem Forenthread besprochen ):

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

Leider wird dies in den Catalina- Versionshinweisen von Apple nicht explizit beschrieben, abgesehen von einer kurzen Erwähnung in den Catalina-Funktionen :

macOS Catalina läuft auf einem dedizierten, schreibgeschützten System-Volume

Da das Verzeichnis /data/dbals MongoDB-Standard codiert ist, besteht eine Problemumgehung darin, ein anderes anzugeben dbpath, das sich nicht im Stammverzeichnis befindet. Zum Beispiel:

mongod --dbpath ~/data/db

Dadurch werden die Daten von MongoDB in Ihrem Home-Verzeichnis abgelegt. Stellen Sie einfach sicher, dass der Pfad ~/data/dbtatsächlich vorhanden ist.

Alternative Methode

Eine alternative Methode besteht darin, den Anweisungen unter Install MongoDB Community Edition unter macOS zu folgen, indem Sie Folgendes nutzen brew:

brew tap mongodb/brew
brew install mongodb-community

Dadurch werden standardmäßig einige zusätzliche Dateien erstellt:

  • die Konfigurationsdatei (/usr/local/etc/mongod.conf)
  • den Protokollverzeichnispfad (/ usr / local / var / log / mongodb)
  • der Datenverzeichnispfad (/ usr / local / var / mongodb)

Zum Ausführen können mongodSie entweder:

  • Führen Sie den Befehl manuell über die Befehlszeile aus (dies kann der Einfachheit halber mit einem Alias ​​versehen werden):

    mongod --config /usr/local/etc/mongod.conf
  • Führen Sie MongoDB als Dienst mit aus brew services. Beachten Sie, dass dadurch MongoDB als eigenständiger Knoten ausgeführt wird (kein Replikatsatz). Daher funktionieren Funktionen, die vom Oplog abhängen, z. B. Änderungsströme, nur, wenn Sie die mongodKonfigurationsdatei ändern :

    brew services start mongodb-community
Kevinadi
quelle
Vielen Dank für die Antwort, irgendwelche Methoden zum Konfigurieren von dbpath in bash_profile? Damit muss mongod nicht jedes Mal mit db path ausgeführt werden.
Madhavan Sundararaj
Ich denke, nach dem Update hat das Betriebssystem den Ordner / data / db gelöscht, der unter mongodb
Madhavan Sundararaj
1
@MadhavanSundararaj Wenn Sie mongodb --dbpath ...nur mongodBash eingeben möchten , können Sie einen Alias ​​wie verwenden alias mongod='mongod --dbpath ...'und diesen Alias ​​in Ihren Code einfügen bashrc. Es ist nicht die sauberste Lösung, aber es könnte für Ihre Zwecke funktionieren.
Kevinadi
verwendet das neueste macOS nicht zsh? Wenn ja, wird weiterhin .bashrc verwendet. Weil der oben vorgeschlagene Alias ​​nicht wie erwartet funktioniert hat
Madhavan Sundararaj
1
@MadhavanSundararaj für zshoder eine andere Shell, müssen Sie den Alias ​​unter die RC-Datei dieser Shell setzen. Denn zshes ist ~/.zshrc. Stellen Sie sicher, dass Sie auch beim Erstellen von Aliasen die Syntax der Shell befolgen.
Kevinadi
61

Nach der Installation von Catalina befindet sich möglicherweise ein Ordner auf Ihrem Desktop mit dem Namen Relocated Items . Sie finden den data/dbOrdner im SecurityOrdner.

Alles was ich tun musste war das zu bewegen Security/data/db , speziell data/dbund legen Sie sie in meinem Home - Ordner.

Sie können dies mit der Finder-App oder mit dem Terminal tun, indem Sie den folgenden Befehl ausführen:

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

Nach diesem Lauf: mongod --dbpath ~/data/db

Es liegt an Ihnen, den Alias ​​früher zu erstellen

Marnix Harderwijk
quelle
6
Ich wäre fast verrückt geworden, dass das Catalina-Upgrade alle meine Daten hätte löschen können. Danke, dass du mich vor dem Wahnsinn gerettet hast!
Adam Bubela
1
Danke @MarnixHarderwijk, es funktioniert bei mir.
Zeeyed
2
Vielen Dank gespeichert Sie meinen Tag, Arbeiten auf MacOS Catalina
afr
Wenn ich den Befehl mongod ausführe, wird Folgendes angezeigt: "mongod" kann nicht geöffnet werden, da der Entwickler nicht überprüft werden kann.
Raz
@Raz: Ich denke, das ist verwandt apple.stackexchange.com/questions/362883/…
Marnix Harderwijk
7

Kevinadi wurde der Frage bereits gerecht, aber so habe ich das Problem gelöst:

Nach der Installation von Mongodb-Community

  1. sudo mkdir -p /System/Volumes/Data/data/db (Erstellen Sie den Ordner data / db)
  2. sudo chown -Rid -un /System/Volumes/Data/data/db(Berechtigungen geben)
  3. mongod --dbpath=/System/Volumes/Data/data/db (Ändern Sie den Datenbankpfad von Mongodb)
  4. mongod (Läuft gut)

Ich fand diesen Artikel über die Installation von Mongodb sehr nützlich

Tolumid
quelle
Dies half nach 1 Tag des Versuchs, das Problem zu beheben! Der Artikel erwähnt nicht das Ändern von dbpath und das hat mir gefehlt
mhlavacka
1

habe einen Trick gefunden ... lösche den gesamten Ordner ~ / data / db aus dem Verzeichnis und erstelle dann einen neuen. Verwende aber NICHT mkdir -p / data / db. Benutze einfach dein Trackpad , um einen Ordner auf systematische Weise zu erstellen

das hat bei mir funktioniert

Tianyu Cao
quelle
Es hat nicht funktioniert :-(
Mo.
1

Folgendes hat bei mir funktioniert:

  1. Erstellen Sie irgendwo einen Ordner, z. B. Development / mongodb / data / db
  2. Öffnen mongod.conf Datei und Update storage.dbPath Wert auf den neu angelegten Ordner Pfad
rolu
quelle
1
Wo ist die Datei mongod.conf?
ValRob
2
Dies ist die Standarddatei. Gehen Sie zu diesem Link: docs.mongodb.com/manual/reference/configuration-options und dann zu "Configuration File"
Rolu
0

Mac-Version Catalina hat den Stammordner nicht mehr beschreibbar gemacht.

Brew hat eine aktualisierte Version von mongodb, um einen neuen Pfad zu verwenden (den es selbst erstellt). Das Befolgen /usr/local/var/mongodbdieser Anweisungen behebt das Problem:

Anleitung zur Installation der aktualisierten Mongodb-Community-Edition

brew install mongodb-community@VERSION wobei die erste VERSION mit dem Fix 4.2 ist

RobKohr
quelle
Der obige Befehl sollte mit sudo ausgeführt werden. Dann wird die dbPath-Konfiguration respektiert. Andernfalls wird mongo /data/dbunabhängig von der Konfiguration standardmäßig verwendet .
Matt Hagemann