MongoDB ne peut pas trouver de répertoire de données après la mise à niveau vers Mac OS 10.15 (Catalina)

61

J'ai mis à jour MacOS 10.15 (Catalina) aujourd'hui. Lorsque je cours mongoddans le terminal, il ne trouve pas le/data/db répertoire:

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

J'ai essayé d'installer MongoDB avec brew:

brew install mongodb

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

De l'aide?

William Hu
la source

Réponses:

91

C'est l'erreur principale:

exception dans initAndListen: NonExistentPath: répertoire de données / data / db introuvable., fin

Catalina a un changement surprise: il n'autorisera pas les modifications du répertoire racine (cela a également été discuté dans un fil de discussion ):

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

Malheureusement, cela n'est pas expliqué explicitement dans les notes de publication d' Apple sur Catalina , à part une brève mention dans les fonctionnalités de Catalina :

macOS Catalina s'exécute dans un volume système dédié en lecture seule

Étant donné que le répertoire /data/dbest codé comme MongoDB par défaut, une solution de contournement consiste à spécifier un autre dbpathqui ne se trouve pas sur le répertoire racine. Par exemple:

mongod --dbpath ~/data/db

Cela placera les données de MongoDB dans votre répertoire personnel. Assurez-vous simplement que le chemin~/data/db existe réellement.

Méthode alternative

Une autre méthode consiste à suivre les instructions de l' installation de MongoDB Community Edition sur macOS en exploitant brew:

brew tap mongodb/brew
brew install mongodb-community

Cela créera des fichiers supplémentaires par défaut:

  • le fichier de configuration (/usr/local/etc/mongod.conf)
  • le chemin du répertoire du journal (/ usr / local / var / log / mongodb)
  • le chemin du répertoire de données (/ usr / local / var / mongodb)

Pour exécuter, mongodvous pouvez soit:

  • Exécutez la commande manuellement à partir de la ligne de commande (cela peut être aliasé pour plus de commodité):

    mongod --config /usr/local/etc/mongod.conf
  • Exécutez MongoDB en tant que service à l'aide de brew services. Notez que cela exécutera MongoDB en tant que nœud autonome (pas un jeu de réplicas), donc les fonctionnalités qui dépendent de l'oplog, par exemple changestreams, ne fonctionneront que si vous modifiez le mongodfichier de configuration:

    brew services start mongodb-community
kevinadi
la source
Merci pour la réponse, des méthodes pour configurer dbpath dans bash_profile? de sorte que, il n'est pas nécessaire d'exécuter mongod avec chemin db à chaque fois.
Madhavan Sundararaj
Je suppose qu'après la mise à jour, le système d'exploitation a supprimé le dossier / data / db qui était présent sous mongodb
Madhavan Sundararaj
1
@MadhavanSundararaj si vous voulez exécuter mongodb --dbpath ...en tapant simplement mongodbash, vous pouvez utiliser un alias comme alias mongod='mongod --dbpath ...'et mettre cet alias dans votre bashrc. Ce n'est pas la solution la plus propre, mais cela pourrait fonctionner pour vos besoins.
kevinadi
n'est pas le dernier macOS utilise zsh? dans l'affirmative, utilise-t-il toujours .bashrc. Parce que l'alias suggéré ci-dessus n'a pas fonctionné comme prévu
Madhavan Sundararaj
1
@MadhavanSundararaj pour zshou tout autre shell, vous devez placer l'alias sous le fichier rc de ce shell. Car zshc'est ~/.zshrc. Assurez-vous également de suivre la syntaxe du shell lors de la création d'alias.
kevinadi
61

Après avoir installé Catalina, vous pourriez avoir un dossier sur votre bureau appelé Relocated Items. Vous pouvez trouver le data/dbdossier dans le Securitydossier.

Tout ce que j'avais à faire était de déplacer le Security/data/db, spécifiquement data/dbet de le placer dans mon dossier personnel.

Vous pouvez le faire avec l'application Finder ou avec le terminal en exécutant la commande suivante:

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

Après cette course: mongod --dbpath ~/data/db

A vous de créer l'alias plus tôt

Marnix Harderwijk
la source
6
Je suis presque devenu fou que la mise à niveau de Catalina aurait pu effacer toutes mes données. Merci de m'avoir sauvé de la folie!
Adam Bubela
1
Merci @MarnixHarderwijk, cela fonctionne pour moi.
Zeeyed
2
Merci beaucoup d'avoir sauvé ma journée, fonctionne sur MacOS Catalina
afr
Lorsque j'exécute la commande mongod, j'obtiens: «mongod» ne peut pas être ouvert car le développeur ne peut pas être vérifié.
Raz
@Raz: Je pense que c'est lié apple.stackexchange.com/questions/362883/…
Marnix Harderwijk
7

Kevinadi a déjà rendu justice à la question, mais voici comment j'ai résolu le problème:

Après l'installation de mongodb-community

  1. sudo mkdir -p /System/Volumes/Data/data/db (Créez le dossier data / db)
  2. sudo chown -Rid -un /System/Volumes/Data/data/db(Accorder des autorisations)
  3. mongod --dbpath=/System/Volumes/Data/data/db (Changer le dbpath de mongodb)
  4. mongod (Fonctionne bien)

J'ai trouvé cet article sur l'installation de mongodb très utile

Tolumide
la source
Cela a aidé après 1 jour à essayer de résoudre le problème! L'article ne mentionne pas la modification de dbpath et c'est ce qui me manquait
mhlavacka
1

trouvé une astuce ... supprimez le dossier entier ~ / data / db du répertoire puis recréez-en un nouveau, mais N'UTILISEZ PAS mkdir -p / data / db à la place, utilisez simplement votre trackpad pour le faire en utilisant la méthode pour créer un dossier

cela a fonctionné pour moi

Tianyu Cao
la source
Cela n'a pas fonctionné :-(
Mo.
1

Voici ce qui a fonctionné pour moi:

  1. Créez un dossier quelque part, par exemple Développement / mongodb / data / db
  2. Ouvrez mongod.conf fichier et mise à jour storage.dbPath valeur au chemin du dossier nouvellement créé
rolu
la source
1
où est le fichier mongod.conf ??
ValRob
2
Il s'agit du fichier par défaut. Allez sur ce lien: docs.mongodb.com/manual/reference/configuration-options puis sur "Fichier de configuration"
rolu
0

La version Mac Catalina a rendu le dossier racine n'est plus accessible en écriture.

Brew a une version mise à jour de mongodb pour utiliser un nouveau chemin (qu'il crée lui-même), /usr/local/var/mongodbet suivre ces instructions corrigera le problème:

Guide d'installation de la mise à jour de la communauté mongodb

brew install mongodb-community@VERSION où la première VERSION avec le correctif est 4.2

RobKohr
la source
La commande ci-dessus doit être exécutée avec sudo. Ensuite, la configuration dbPath sera respectée. Sinon, mongo reste par défaut /data/dbindépendamment de la configuration.
Matt Hagemann