MongoDB не может найти каталог данных после обновления до Mac OS 10.15 (Catalina)

61

Я сегодня обновился до MacOS 10.15 (Каталина). Когда я запускаю 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

Любая помощь?

Уильям Ху
источник

Ответы:

91

Это основная ошибка:

исключение в initAndListen: NonExistentPath: каталог данных / data / db не найден., завершается

У Каталины неожиданное изменение: она не допустит изменений в корневом каталоге (это также обсуждалось в ветке форума ):

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

К сожалению, это явно не указано в примечаниях к выпуску Apple Catalina , за исключением краткого упоминания в функциях Catalina :

macOS Catalina работает на выделенном системном томе только для чтения

Поскольку каталог /data/dbзакодирован как MongoDB по умолчанию, обходной путь должен указать другой, dbpathкоторый не находится в корневом каталоге. Например:

mongod --dbpath ~/data/db

Это поместит данные MongoDB в ваш домашний каталог. Просто убедитесь, что путь ~/data/dbдействительно существует.

Альтернативный метод

Альтернативный метод состоит в том, чтобы следовать инструкциям в Install MongoDB Community Edition на macOS , используя 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 как автономный узел (не набор реплик), поэтому функции, которые зависят от оплога, например, changetreams, не будут работать, если вы не измените mongodфайл конфигурации:

    brew services start mongodb-community
kevinadi
источник
Спасибо за ответ, есть ли способы настроить dbpath в bash_profile? так что нет необходимости каждый раз запускать mongod с db path.
Мадхаван
Я думаю, после обновления ОС удалила папку / data / db, которая присутствовала в mongodb
Мадхаван
1
@MadhavanSundararaj Если вы хотите запустить mongodb --dbpath ..., просто набрав mongodв bash, вы можете использовать псевдоним как alias mongod='mongod --dbpath ...'и поместить этот псевдоним в свой bashrc. Это не самое чистое решение, но оно может работать для ваших целей.
Кевинади
разве последние macOS не используют zsh? если это так, он все еще использует .bashrc. Поскольку предложенный выше псевдоним не сработал, как ожидалось
Мадхаван
1
@MadhavanSundararaj для zshлюбой другой оболочки, вам нужно поместить псевдоним в файл rc этой оболочки. Для zshэтого ~/.zshrc. Убедитесь, что вы также соблюдаете синтаксис оболочки при создании псевдонимов.
Кевинади
61

После установки Catalina у вас может появиться папка на рабочем столе Relocated Items. Вы можете найти data/dbпапку внутри Securityпапки.

Все, что мне нужно было сделать, это переместить Security/data/db, в частности, data/dbи поместить его в мою домашнюю папку.

Это можно сделать с помощью приложения Finder или терминала, выполнив следующую команду:

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

После этого запустите: mongod --dbpath ~/data/db

Вы должны создать псевдоним ранее

Марникс Хардервейк
источник
6
Я почти сошел с ума, что обновление Catalina могло стереть все мои данные. Спасибо, что спас меня от безумия!
Адам Бубела
1
Спасибо @MarnixHarderwijk, это работает для меня.
Zeeyed
2
Большое спасибо Вы спасли мой день, работает на MacOS Каталина
AFR
Когда я запускаю команду mongod, я получаю: «mongod» не может быть открыт, потому что разработчик не может быть проверен.
Раз
@Raz: Я думаю, что это связано apple.stackexchange.com/questions/362883/…
Марникс Хардервейк
7

Кевинади уже дал справедливость этому вопросу, однако вот как я решил проблему:

После установки mongodb-сообщества

  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 (Изменить dbpath mongodb)
  4. mongod (Работает хорошо)

Я нашел эту статью об установке mongodb очень полезной

Tolumide
источник
Это помогло после 1 дня попытки решить проблему! В статье не упоминается изменение dbpath, и это то, чего мне не хватало
mhlavacka
1

нашел хитрость ... удалите всю папку ~ / data / db из каталога, затем заново создайте новую, но НЕ ИСПОЛЬЗУЙТЕ вместо этого mkdir -p / data / db, просто используйте трекпад, чтобы использовать его системным способом для создания папки

это сработало для меня

Тянью Цао
источник
Это не сработало :-(
Пн
1

Вот что сработало для меня:

  1. Создайте папку где-нибудь, например, Development / mongodb / data / db
  2. Откройте файл mongod.conf и обновите значение storage.dbPath для вновь созданного пути к папке
rolu
источник
1
где находится файл mongod.conf ??
ValRob
2
Это файл по умолчанию. Перейдите по этой ссылке: docs.mongodb.com/manual/reference/configuration-options, а затем в «Файл конфигурации»
rolu
0

Mac версия Catalina сделала корневую папку больше не доступной для записи.

Brew имеет обновленную версию mongodb для использования нового пути (который он сам создает), /usr/local/var/mongodbи следование этим инструкциям устранит проблему:

Руководство по установке обновленного mongodb-community-edition

brew install mongodb-community@VERSION где первая ВЕРСИЯ с исправлением 4.2

RobKohr
источник
Вышеуказанная команда должна быть выполнена с sudo. Тогда конфигурация dbPath будет соблюдена. В противном случае Монго по-прежнему по умолчанию /data/dbнезависимо от конфигурации.
Мэтт Хагеманн