MongoDB nie może znaleźć katalogu danych po aktualizacji do Mac OS 10.15 (Catalina)

61

Zaktualizowałem dzisiaj system MacOS 10.15 (Catalina). Kiedy uruchamiam mongodw terminalu, nie może znaleźć /data/dbkatalogu:

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

Próbowałem zainstalować MongoDB za pomocą brew:

brew install mongodb

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

Jakaś pomoc?

William Hu
źródło

Odpowiedzi:

91

To jest główny błąd:

wyjątek w initAndListen: NonExistentPath: Nie znaleziono katalogu danych / danych / db., zakończenie

Catalina ma niespodziewaną zmianę: nie pozwoli na zmiany w katalogu głównym (zostało to również omówione w wątku na forum ):

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

Niestety nie zostało to wyraźnie zaznaczone w informacjach o wydaniu Catalina przez Apple , oprócz krótkiej wzmianki o funkcjach Catalina :

macOS Catalina działa w dedykowanym woluminie systemowym tylko do odczytu

Ponieważ katalog /data/dbjest zakodowany jako domyślny MongoDB, obejściem tego problemu jest określenie innego, dbpathktóry nie znajduje się w katalogu głównym. Na przykład:

mongod --dbpath ~/data/db

Spowoduje to umieszczenie danych MongoDB w twoim katalogu domowym. Upewnij się tylko, że ścieżka ~/data/dbrzeczywiście istnieje.

Alternatywna metoda

Alternatywną metodą jest postępowanie zgodnie z instrukcjami w Instalowanie MongoDB Community Edition na macOS , wykorzystując brew:

brew tap mongodb/brew
brew install mongodb-community

Spowoduje to domyślne utworzenie dodatkowych plików:

  • plik konfiguracyjny (/usr/local/etc/mongod.conf)
  • ścieżka katalogu dziennika (/ usr / local / var / log / mongodb)
  • ścieżka katalogu danych (/ usr / local / var / mongodb)

Aby uruchomić mongod, możesz:

  • Uruchom polecenie ręcznie z wiersza poleceń (dla wygody można to zmienić):

    mongod --config /usr/local/etc/mongod.conf
  • Uruchom MongoDB jako usługę przy użyciu brew services. Zauważ, że uruchomi to MongoDB jako samodzielny węzeł (nie jest to zestaw replik), więc funkcje zależne od oplogu, np. Strumienie zmian nie będą działać, chyba że zmodyfikujesz mongodplik konfiguracyjny:

    brew services start mongodb-community
Kevinadi
źródło
Dziękujemy za odpowiedź, jakieś metody konfiguracji dbpath w bash_profile? tak, że nie ma potrzeby uruchamiania mongod ze ścieżką db za każdym razem.
Madhavan Sundararaj
Wydaje mi się, że po aktualizacji usunięto folder OS / data / db, który był obecny pod mongodb
Madhavan Sundararaj,
1
@MadhavanSundararaj, jeśli chcesz uruchomić mongodb --dbpath ...po prostu wpisując mongodbash, możesz użyć aliasu alias mongod='mongod --dbpath ...'lub umieścić go w swoim bashrc. To nie jest najczystsze rozwiązanie, ale może działać dla twoich celów.
kevinadi
czy najnowsze MacOS nie używa Zsh? jeśli tak, to czy nadal używa .bashrc. Ponieważ powyższy sugerowany alias nie działał zgodnie z oczekiwaniami
Madhavan Sundararaj,
1
@MadhavanSundararaj dla zshlub jakiejkolwiek innej powłoki, musisz umieścić alias pod plikiem rc tej powłoki. Za zshto ~/.zshrc. Upewnij się także, że postępujesz zgodnie ze składnią powłoki również przy tworzeniu aliasów.
kevinadi,
61

Po zainstalowaniu Cataliny możesz mieć folder na pulpicie o nazwie Relocated Items. Możesz znaleźć data/dbfolder w Securityfolderze.

Wszystko, co musiałem zrobić, to przenieść Security/data/dbkonkretnie data/dbi umieścić go w folderze domowym.

Możesz to zrobić za pomocą aplikacji Finder lub terminala, uruchamiając następujące polecenie:

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

Po tym uruchomieniu: mongod --dbpath ~/data/db

Utworzenie aliasu zależy od Ciebie wcześniej

Marnix Harderwijk
źródło
6
Niemal oszalałem, że aktualizacja Catalina mogła usunąć wszystkie moje dane. Dzięki za uratowanie mnie przed szaleństwem!
Adam Bubela,
1
Dzięki @MarnixHarderwijk, to działa dla mnie.
Zeeyed
2
Dziękuję bardzo uratowałeś mój dzień, działa na MacOS Catalina
AFR
Kiedy uruchamiam polecenie mongod, otrzymuję: „mongod” nie może zostać otwarty, ponieważ deweloper nie może zostać zweryfikowany.
Raz
@Raz: Myślę, że jest to powiązane apple.stackexchange.com/questions/362883/...
Marnix Harderwijk
7

Kevinadi już zadał pytanie, ale w ten sposób rozwiązałem problem:

Po zainstalowaniu społeczności mongodb

  1. sudo mkdir -p /System/Volumes/Data/data/db (Utwórz folder data / db)
  2. sudo chown -Rid -un /System/Volumes/Data/data/db(Daj uprawnienia)
  3. mongod --dbpath=/System/Volumes/Data/data/db (Zmień dbpath mongodb)
  4. mongod (Działa dobrze)

Uważam, że ten artykuł na temat instalowania mongodb jest bardzo przydatny

Tolumid
źródło
Pomogło to po 1 dniu próby rozwiązania problemu! Artykuł nie wspomina o zmianie dbpath i tego mi brakowało
mhlavacka
1

znalazłem sztuczkę ... usuń cały katalog ~ / data / db z katalogu, a następnie ponownie utwórz nowy, ale NIE UŻYWAJ zamiast tego mkdir -p / data / db, po prostu użyj gładzika, aby to zrobić, użyj systemowego sposobu utworzenia folderu

to zadziałało dla mnie

Tianyu Cao
źródło
To nie zadziałało :-(
Pon.
1

Oto, co zadziałało dla mnie:

  1. Utwórz gdzieś folder, np. Development / mongodb / data / db
  2. Otwarte mongod.conf plików i aktualizacja storage.dbPath wartość do nowo utworzonej ścieżki folderu
rolu
źródło
1
gdzie jest plik mongod.conf?
ValRob,
2
Jest to plik domyślny. Przejdź do tego linku: docs.mongodb.com/manual/reference/configuration-options, a następnie do „pliku konfiguracyjnego”
rolu
0

Wersja Maca Catalina sprawiła, że ​​folder główny nie jest już zapisywalny.

Brew ma zaktualizowaną wersję mongodb do korzystania z nowej ścieżki (którą sam tworzy), /usr/local/var/mongodba wykonanie tych instrukcji naprawi problem:

Przewodnik po instalacji zaktualizowanej wersji mongodb-community-edition

brew install mongodb-community@VERSION gdzie pierwsza WERSJA z poprawką to 4.2

RobKohr
źródło
Powyższe polecenie należy wykonać za pomocą sudo. Następnie konfiguracja dbPath będzie przestrzegana. W przeciwnym razie mongo nadal domyślnie /data/dbdziała niezależnie od konfiguracji.
Matt Hagemann