MongoDB no puede encontrar el directorio de datos después de actualizar a Mac OS 10.15 (Catalina)

61

Actualicé a MacOS 10.15 (Catalina) hoy. Cuando ejecuto mongoden la terminal no puede encontrar el /data/dbdirectorio:

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

Traté de instalar MongoDB con brew:

brew install mongodb

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

¿Alguna ayuda?

William Hu
fuente

Respuestas:

91

Este es el error principal:

excepción en initAndListen: NonExistentPath: directorio de datos / data / db no encontrado., terminando

Catalina tiene un cambio sorprendente: no permitirá cambios en el directorio raíz (esto también se discutió en un hilo del foro ):

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

Desafortunadamente, esto no se explica explícitamente en las notas de lanzamiento de Catalina de Apple , aparte de una breve mención en las características de Catalina :

macOS Catalina se ejecuta en un volumen de sistema dedicado de solo lectura

Dado que el directorio /data/dbestá codificado como predeterminado de MongoDB, una solución alternativa es especificar un dbpathdirectorio diferente que no se encuentre en el directorio raíz. Por ejemplo:

mongod --dbpath ~/data/db

Esto colocará los datos de MongoDB en su directorio de inicio. Solo asegúrese de que el camino ~/data/dbrealmente exista.

Método alternativo

Un método alternativo es seguir las instrucciones en Instalar MongoDB Community Edition en macOS aprovechando brew:

brew tap mongodb/brew
brew install mongodb-community

Esto creará algunos archivos adicionales por defecto:

  • el archivo de configuración (/usr/local/etc/mongod.conf)
  • la ruta del directorio de registro (/ usr / local / var / log / mongodb)
  • la ruta del directorio de datos (/ usr / local / var / mongodb)

Para correr mongodpuedes:

  • Ejecute el comando manualmente desde la línea de comando (esto puede ser alias por conveniencia):

    mongod --config /usr/local/etc/mongod.conf
  • Ejecute MongoDB como un servicio utilizando brew services. Tenga en cuenta que esto ejecutará MongoDB como un nodo independiente (no un conjunto de réplicas), por lo que las funciones que dependen del registro de operaciones, por ejemplo, changestreams, no funcionarán a menos que modifique el mongodarchivo de configuración:

    brew services start mongodb-community
kevinadi
fuente
Gracias por la respuesta, ¿algún método para configurar dbpath en bash_profile? así que no hay necesidad de ejecutar mongod con db path cada vez.
Madhavan Sundararaj
Supongo que, después de la actualización, el SO eliminó la carpeta / data / db que estaba presente en mongodb
Madhavan Sundararaj
1
@MadhavanSundararaj si quieres correr mongodb --dbpath ...simplemente escribiendo mongodbash, puedes usar un alias como alias mongod='mongod --dbpath ...'y poner ese alias en tu bashrc. No es la solución más limpia, pero podría funcionar para sus propósitos.
kevinadi
¿No es el último macOS que usa zsh? si es así, ¿todavía usa .bashrc? Debido a que el alias sugerido anteriormente no funcionó como se esperaba
Madhavan Sundararaj
1
@MadhavanSundararaj para zsho cualquier otro shell, debe colocar el alias debajo del archivo rc de ese shell. Por zsheso es ~/.zshrc. Asegúrese de seguir también la sintaxis del shell al crear alias también.
kevinadi
61

Después de instalar Catalina, es posible que tenga una carpeta en su escritorio llamada Relocated Items. Puede encontrar la data/dbcarpeta dentro de la Securitycarpeta.

Todo lo que tenía que hacer era mover el Security/data/db, específicamente data/dby colocarlo dentro de mi carpeta de inicio.

Puede hacer esto con la aplicación Finder o con el terminal ejecutando el siguiente comando:

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

Después de esa carrera: mongod --dbpath ~/data/db

Depende de usted crear el alias antes

Marnix Harderwijk
fuente
66
Casi me volví loco porque la actualización de Catalina podría haber borrado todos mis datos. ¡Gracias por salvarme de la locura!
Adam Bubela
1
Gracias @MarnixHarderwijk, funciona para mí.
Zeeyed
2
Muchas gracias guardó mi día, que funciona en MacOS Catalina
AFR
Cuando ejecuto el comando mongod obtengo: "mongod" no se puede abrir porque no se puede verificar el desarrollador.
Raz
@Raz: Creo que esto está relacionado apple.stackexchange.com/questions/362883/…
Marnix Harderwijk
7

Kevinadi ya hizo justicia a la pregunta, sin embargo, así es como hice para resolver el problema:

Después de instalar mongodb-community

  1. sudo mkdir -p /System/Volumes/Data/data/db (Cree la carpeta data / db)
  2. sudo chown -Rid -un /System/Volumes/Data/data/db(Dar permisos)
  3. mongod --dbpath=/System/Volumes/Data/data/db (Cambiar dbpath de mongodb)
  4. mongod (Corre bien)

Encontré este artículo sobre la instalación de mongodb muy útil

Tolumida
fuente
¡Esto ayudó después de 1 día de intentar solucionar el problema! El artículo no menciona el cambio de dbpath y eso es lo que me faltaba
mhlavacka
1

encontró un truco ... elimine la carpeta completa ~ / data / db del directorio y luego vuelva a crear una nueva, pero NO USE mkdir -p / data / db en su lugar, solo use su trackpad para usar la forma del sistema para crear la carpeta

esto funcionó para mí

Tianyu Cao
fuente
No funcionó :-(
Mo.
1

Esto es lo que funcionó para mí:

  1. Cree una carpeta en algún lugar, por ejemplo, Desarrollo / mongodb / data / db
  2. Abrir mongod.conf archivo y actualización storage.dbPath valor a la ruta de la carpeta recién creada
rolu
fuente
1
¿Dónde está el archivo mongod.conf?
ValRob
2
Es el archivo predeterminado. Vaya a este enlace: docs.mongodb.com/manual/reference/configuration-options y luego a "Configuration File"
rolu
0

La versión para Mac Catalina hizo que la carpeta raíz ya no se pueda escribir.

Brew tiene una versión actualizada de mongodb para usar una nueva ruta (que se crea sola), /usr/local/var/mongodby siguiendo estas instrucciones se solucionará el problema:

Guía para instalar mongodb-community-edition actualizada

brew install mongodb-community@VERSION donde la primera VERSIÓN con la corrección es 4.2

RobKohr
fuente
El comando anterior debe ejecutarse con sudo. Entonces se respetará la configuración de dbPath. De lo contrario, mongo sigue siendo el valor predeterminado /data/dbindependientemente de la configuración.
Matt Hagemann