Mongod se plaint qu'il n'y a pas de dossier / data / db

475

J'utilise mon nouveau mac pour la première fois aujourd'hui. Je suis le guide de démarrage sur mongodb.org jusqu'à l'étape où l'on crée le répertoire / data / db. btw, j'ai utilisé la route homebrew.

J'ouvre donc un terminal, et je pense que je suis dans ce que vous appelez le répertoire personnel, car lorsque je fais "ls", je vois des dossiers de Documents d'application de bureau Musique Musique Documents Documents et Bibliothèque.

J'ai donc fait un

mkdir -p /data/db

tout d'abord, il dit que l'autorisation a été refusée. J'ai continué d'essayer différentes choses pendant une demi-heure et finalement:

mkdir -p data/db

travaillé. et quand je "ls", un répertoire de données et imbriqué dedans un dossier db existe.

puis je lance mongod et il se plaint de ne pas trouver de données / db

Ai-je fait quelque chose de mal?

Maintenant, j'ai fait le

sudo mkdir -p /data/db

et quand je fais un "ls" je vois le répertoire de données et le répertoire db. à l'intérieur du répertoire db cependant, il n'y a absolument rien dedans et quand je lance maintenant mongod

Sun Oct 30 19:35:19 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Sun Oct 30 19:35:19 dbexit: 
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close listening sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to flush diaglog...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: waiting for fs preallocator...
Sun Oct 30 19:35:19 [initandlisten] shutdown: lock for final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: closing all files...
Sun Oct 30 19:35:19 [initandlisten] closeAllFiles() finished
Sun Oct 30 19:35:19 [initandlisten] shutdown: removing fs lock...
Sun Oct 30 19:35:19 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Sun Oct 30 19:35:19 dbexit: really exiting now

EDIT Obtention d'un message d'erreur pour

sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

Merci tout le monde!

Nik So
la source
1
l '"argument non valide" signifie que le nom symbolique de l'utilisateur mongo est différent sur votre système - vous utilisez probablement un package ou un mécanisme d'installation différent pour installer MongoDB. Vous devriez vérifier vos fichiers / etc / passwd et / etc / group pour le nom symbolique (ou uid / gid) de l'utilisateur mongo grep mongo /etc/passwd /etc/group. Si cela ne fonctionne pas, vérifiez le nom en vérifiant le propriétaire du répertoire ls -ld /var/lib/mongo. Ou pour voir le uid / gid faire ceci: ls -lnd /var/lib/mongo. Dans mon cas drwxr-xr-x. 6 *487 480* 4096 Sep 20 2011 ...- cela signifie utiliser 487: 480 comme paramètre
Tilo
utiliser l'UID / GID est synonyme d'utiliser le nom symbolique. par exemple, il suffit de remplacer 'mongod: mongod par les numéros uid / gid que vous avez trouvés avec la méthode ci-dessus ..
Tilo
Maintenant que nous savons comment ajouter correctement ce répertoire (data / db), pourquoi ce répertoire n'a-t-il pas été inclus dans l'installation en premier lieu?
winux
Si vous venez de passer à MacOS 10.15, cette réponse pourrait vous aider: stackoverflow.com/questions/58283257/…
Adam Zerner
si vous avez la dernière version de MAC: Avec la nouvelle mise à jour de macOS Catalina, le dossier "/ data / db" devient en lecture seule, vous ne pouvez pas le modifier. Suivez cette procédure pour créer une base de données dans un autre dossier: 1) Changez le répertoire mongod: sudo mongod --dbpath / System / Volumes / Data / data / db 2) Donnez-lui un alias: alias mongod = "sudo mongod --dbpath / System / Volumes / Data / data / db "
Farbod Aprin

Réponses:

636

Vous avez créé le répertoire au mauvais endroit

/ data / db signifie qu'il se trouve directement sous le répertoire racine '/', alors que vous avez créé 'data / db' (sans le début /) probablement juste dans un autre répertoire, tel que le répertoire principal '/ root'.

Vous devez créer ce répertoire en tant que root

Soit vous devez utiliser sudo, par exemplesudo mkdir -p /data/db

Ou vous devez faire su -pour devenir superutilisateur, puis créer le répertoire avecmkdir -p /data/db


Remarque:

MongoDB a également une option où vous pouvez créer le répertoire de données dans un autre emplacement, mais ce n'est généralement pas une bonne idée, car cela complique légèrement les choses telles que la récupération de base de données, car vous devez toujours spécifier le chemin db manuellement. Je ne recommanderais pas de faire ça.


Éditer:

le message d'erreur que vous obtenez est "Impossible de créer / ouvrir le fichier de verrouillage: /data/db/mongod.lock errno: 13 Autorisation refusée" . Le répertoire que vous avez créé ne semble pas avoir les autorisations et la propriété correctes - il doit être accessible en écriture par l'utilisateur qui exécute le processus MongoDB.

Pour voir les autorisations et la propriété du répertoire '/ data / db /', procédez comme suit: (voici à quoi devraient ressembler les autorisations et la propriété)

$ ls -ld /data/db/
drwxr-xr-x 4 mongod mongod 4096 Oct 26 10:31 /data/db/

Le côté gauche «drwxr-xr-x» affiche les autorisations pour l'utilisateur, le groupe et les autres. 'mongod mongod' montre à qui appartient le répertoire et à quel groupe ce répertoire appartient. Les deux sont appelés «mongod» dans ce cas.

Si votre répertoire '/ data / db' n'a pas les autorisations et la propriété ci-dessus, procédez comme suit :

Vérifiez d'abord quel utilisateur et quel groupe votre utilisateur mongo possède:

# grep mongo /etc/passwd
mongod:x:498:496:mongod:/var/lib/mongo:/bin/false

Vous devriez avoir une entrée pour mongod dans / etc / passwd, car c'est un démon.

sudo chmod 0755 /data/db
sudo chown -R 498:496 /data/db    # using the user-id , group-id

Vous pouvez également utiliser le nom d'utilisateur et le nom de groupe, comme suit: (ils peuvent être trouvés dans / etc / passwd et / etc / group)

sudo chown -R mongod:mongod /data/db 

cela devrait le faire fonctionner ..

Dans les commentaires ci-dessous, certaines personnes ont utilisé ceci:

sudo chown -R `id -u` /data/db
sudo chmod -R go+w /data/db

ou

sudo chown -R $USER /data/db 
sudo chmod -R go+w /data/db

L'inconvénient est que $ USER est un compte doté d'un shell de connexion. Les démons ne devraient idéalement pas avoir de shell pour des raisons de sécurité, c'est pourquoi vous voyez / bin / false dans le grep du fichier de mot de passe ci-dessus.

Vérifiez ici pour mieux comprendre la signification des autorisations de répertoire:

http://www.perlfect.com/articles/chmod.shtml

Peut-être consultez également l'un des tutoriels que vous pouvez trouver via Google: "UNIX pour les débutants"

Tilo
la source
2
essayez de faire ls -ld /data/ et ls -ld /data/db/.. vous verrez les autorisations de répertoire répertoriées sur le côté gauche, puis la propriété, puis le nom du répertoire. vous devez vous assurer que les répertoires sont accessibles en écriture par l'ID utilisateur qui exécute MongoDB.
2
@Tilo Oui, je les ai fait. Le premier, le chmod s'est bien passé, le second dit "chown: mongod: Argument invalide"
Nik So
3
C'est tout le fil, c'est exactement ce que je traverse. Mais je ne peux pas non plus sembler comprendre quel est l'ID utilisateur et l'ID de groupe de mongo sur mon système ni trouver de documentation à ce sujet n'importe où. Je suis bloqué sur le chong mongod: mongod part as its return aninvalid arguement
Trip
10
Mise à jour, je suis allé avec sudo touch /data/db/mongod.locket sudo chmod 0777 /data/db/mongd.lock. Elle a commencé tout de suite.
Trip
141
Courir sudo chown -R `id -u` /data/dbou sudo chown -R $USER /data/dbau lieu de sudo chown mongod:mongod /data/dbfaire l'affaire pour moi
heitortsergent
117

Après avoir obtenu la même erreur que Nik

chown: id -u: argument non valide

J'ai découvert ce qui semble avoir eu lieu d'utiliser le mauvais type de guillemets (aurait dû être backquotes ) Forums Ubuntu

Au lieu de cela, je viens d'utiliser

sudo chown $ USER / data / db

comme alternative et maintenant mongod a les autorisations dont il a besoin.

jagough
la source
4
Si quelqu'un le trouve utile: j'ai eu le même problème, mais le message d'erreur était un peu différent (dit que le groupe 'mongod' n'existe pas quand j'ai essayé chown mongod: mongod) -> cependant, utiliser chown $ USER a fonctionné pour moi, merci ...
trainoasis
6
J'ai dû ajouter un -R à cela. "sudo chown -R $ USER / data / db"
Kevin
1
Réponse parfaite pour les débutants,
Pyae Sone
90

Cela fonctionne pour moi, trouvé dans les commentaires:

sudo chown -R $USER /data/db
Iman Mohamadi
la source
2
De même pour moi. L'installation de mongo via homebrew sur mon OSX n'ajoute pas d'utilisateur et de groupe mongod.
Zauker
73

Créez le dossier.

sudo mkdir -p /data/db/

Donnez-vous la permission du dossier.

sudo chown `id -u` /data/db

Ensuite, vous pouvez courir mongodsans sudo. Fonctionne sur OSX Yosemite

Connor Leech
la source
1
Au lieu de créer un nouveau répertoire, essayez de redémarrer le service mongod. Par exemple: - redémarrage du service mongod
Devendra Bhat
bogdanmac:~ iliebogdanbarbulescu$ sudo chown `id -u` /data/db chown: /data/db: No such file or directory
bibscy
32

Pour corriger cette erreur sur OS X, j'ai redémarré et arrêté le service: $ brew services restart mongodb $ brew services stop mongodb

Puis j'ai couru mongod --config /usr/local/etc/mongod.conf et le problème avait disparu.

L'erreur semble survenir après la mise à niveau du package homebrew mongodb.

orluke
la source
23

Installation via brew sur Mac où YOUR_USER_NAME et le personnel sont le groupe

sudo mkdir -p /data/db
sudo chmod +x+r+w /data/db/
sudo touch /data/db/mongod.lock
sudo chown YOUR_USER_NAME:staff /data/db
sudo chmod +x+r+w /data/db/mongod.lock
sudo chown YOUR_USER_NAME:staff /data/db/mongod.lock
Gal Bracha
la source
@MarkusWMahlberg Merci pour cela. c'est une de ces choses qui se sentait bizarre mais qui marchait. alors qui devrait être le propriétaire et le groupe de ce fichier?
Gal Bracha
Cela dépend de votre distribution. Jetez un œil au /etc/passwdnom d'utilisateur - le groupe est probablement identique. C'est généralement soit mongoou mongodb.
Markus W Mahlberg
@MarkusWMahlberg ok - je l'ai corrigé maintenant - lors de l'installation via brew, il ne crée pas l'utilisateur et le groupe, je le mets simplement à mon propre nom d'utilisateur. voir si c'est plus sécurisé maintenant. merci
Gal Bracha
Merci. Lors du développement sur mac avec brew, cela résout le problème. Pas besoin de plus de sécurité si vous utilisez simplement des données de test dans mongodb. @MarkusWMahlberg sur OS X, l'utilisateur exécutant mongod est YOUR_USER_NAME si vous le démarrez simplement avec "mongod &".
gaspard
22

Si vous exécutez mongo sans arguments, cela suppose que vous exécutez sur la machine de production, il utilise donc les emplacements par défaut.

pour utiliser votre propre base de données (dev ou juste une autre):

./bin/mongod --dbpath ~/data/db
loreii
la source
Est-ce que cela explique pourquoi il n'utilisera pas les paramètres déclarés dans /etc/mongod.conf? Eu des problèmes avec une installation de 3.6.5 sur Ubuntu 16.04.
Dark Star1
essayez de démarrer en mode verbeux (-v) ou forcez explicitement la configuration (--config): docs.mongodb.com/manual/reference/program/mongod Si vous installez à l'aide d'apt-get, démarrez-le avec le service mongod status / start / stop
loreii
J'ai regardé dans les journaux mongo. Tout ce qu'il disait, c'était que l'absence du répertoire / data / db empêchait le démarrage. Vous avez finalement trouvé votre réponse et cela semble être la raison des problèmes?
Dark Star1
Cela fonctionne également lorsque vous utilisez MongoDB dans le sous-système Linux sur Windows, où il n'est pas possible de créer / data / db à la racine fs.
hiergiltdiestfu
8

J'ai eu ce problème avec une configuration Mongodb existante. Je ne sais toujours pas pourquoi cela s'est produit, mais pour une raison quelconque, le processus Mongod n'a pas pu trouver le fichier mongod.config. Parce qu'il n'a pas pu trouver le fichier de configuration, il a essayé de trouver les fichiers DB dans / data / db, un dossier qui n'existait pas. Cependant, le fichier de configuration était toujours disponible, je me suis donc assuré que le processus dispose des autorisations sur le fichier de configuration et exécutez le processus mongod avec l'indicateur --config comme suit:

mongod --config /etc/mongod.conf

Dans le fichier de configuration lui-même, j'avais ce paramètre:

storage:
  dbPath: /var/lib/mongodb

Et c'est ainsi que le processus pourrait retrouver le vrai dossier DB.

Tal Delbari
la source
1
Je confirme que cela m'est arrivé. Au lieu du fichier de configuration, nous pouvons simplement définir --dbpath = / var / lib / mongodb. Je pensais avoir perdu toutes mes données mais elles sont toujours là.
lenhhoxung
8

J'ai fait

brew install mongodb

le 2018-02-01 et cela m'a donné la mongodbversion 3.6.2.

Invité par la réponse d’orluke ci-dessus, j’ai essayé

$ brew services restart mongodb

et tout a pris vie. Mon mongoose.createConnection()appel a fait ce que je voulais. Le GUI MongoDB Compass , la version communautaire, se connecterait. J'ai utilisé Compass pour regarder la local.startup_logcollection. Cela contenait un document, le journal de moi qui venait de démarrer le service mongoDB, et qui avait

cmdLine:Object
    config:"/usr/local/etc/mongod.conf"

et en effet il y avait un tel dossier:

$ more /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1

et il y avait un /usr/local/var/mongodbrépertoire avec beaucoup de fichiers obscurs. Il semble donc que l'installation fonctionne maintenant.

Je ne sais pas si brew services restartle service s'exécute à la connexion. J'ai donc fait

brew services stop mongodb
brew services start mongodb

et espère que cela recommence après le redémarrage. Et, en effet, il l'a fait. En fait, maintenant, je pense que la bonne chose à faire après l'installation initiale est

brew services start mongodb

et cela devrait démarrer le service et le redémarrer après le redémarrage.

emrys57
la source
7

Votre commande aura créé la structure de répertoires dans le dossier actuel, pas le répertoire racine de votre ordinateur (qui est ce qui manque /).

La première commande était correcte, mais comme vous essayez de créer un dossier dans /, qui est un répertoire protégé, vous devez le préfixer avecsudo , ce qui est l'abréviation de "superuser do". On vous demandera ensuite votre mot de passe.

Ainsi, la commande complète serait:

$ sudo mkdir -p /data/db
Russell
la source
6

Vous devez créer / data / db ... qui est un répertoire appelé / data / dans votre racine (ie / ) et un sous-dossier appelé / db / ...

Vous obtenez des erreurs d'autorisation car vous devez utiliser sudo pour créer un répertoire dans votre répertoire racine sous MacOS, sudo vous permet d'exécuter des commandes en tant qu'administrateur.

Alors, lancez ceci à la place ...

$ sudo mkdir -p /data/db

Cela vous demandera un mot de passe, c'est le même mot de passe que vous utilisez pour modifier les paramètres système (cette petite boîte de dialogue qui s'ouvre lorsque vous essayez de changer les choses dans les Préférences Système pour ecample), et probablement le même que celui que vous utilisez pour vous connecter.

Justin Jenkins
la source
6

Vous essayez de créer un répertoire auquel vous n'avez pas accès root.

Pour tester mongodb, j'utilise simplement un répertoire de mon répertoire utilisateur comme:

cd
mkdir -p temp/
mongod --dbpath .

Cela fera une base de données mongo dans temp / à partir de votre répertoire de travail actuel

EhevuTov
la source
6

J'ai surmonté ce même problème en créant les dossiers / data / db avec mon gestionnaire de fenêtres. J'ai d'abord essayé de le faire via le terminal, et pour créer un dossier dans le répertoire racine, j'ai dû utiliser sudo.

Je suis juste allé dans le répertoire racine à l'aide du Finder et j'ai créé un nouveau dossier en utilisant 'Nouveau dossier'. Totalement travaillé pour moi.

Remarque: j'utilise OSX.

Jupo
la source
5

Juste un petit mot:

Si vous avez essayé d'exécuter mongod sans modifier d'abord les autorisations, vous aurez probablement un fichier mongod.lock (et quelques autres fichiers) dans le répertoire / data / db. Même après avoir modifié les autorisations pour le répertoire / data / db pour donner accès à votre $ USER, vous continuerez à obtenir le "Impossible de créer / ouvrir le fichier de verrouillage: /data/db/mongod.lock errno: 13 Permission refusée " Erreur. Exécutez ls -al / data / db et vous verrez probablement que les autorisations pour les fichiers individuels sont toujours définies sur root pour l'utilisateur, pas sur votre $ USER. Vous devez supprimer le fichier mongod.lock et les autres également. Ensuite, lorsque vous exécutez à nouveau mongod, tout devrait fonctionner et vous pouvez vérifier que les autorisations de fichier correspondent aux autorisations de répertoire en exécutant à nouveau ls -al.

whiny_nil
la source
c'est une bonne note. Je n'avais pas de fichier de verrouillage, mais j'avais besoin de changer le propriétaire de mes données et de mon dossier db.
Caranicas
5

Créer un répertoire dans la racine

sudo mkdir -p /data/db

Maintenant, changez le propriétaire

sudo chown -R $USER /data

Vous êtes prêt à partir!

mongod

au lieu d'utiliser sudo mongod, vous n'avez pas besoin de mettre un mot de passe à chaque fois, mais pour le vrai projet que vous devez utiliser sudo mongod, ne donnez pas la permission à l'utilisateur normal!

BloodyLogic
la source
4

J'ai continué à obtenir l'erreur suivante lorsque j'ai essayé de démarrer mongodb.

"shutting down with code:100" 

J'utilisais la commande suivante:

./mongod --dbpath=~/mongo-data

Le correctif pour moi était que je n'avais pas besoin du signe "=" et cela provoquait l'erreur. J'ai donc fait

./mongod --dbpath ~/mongo-data

Je voulais juste jeter cela parce que l'erreur ne spécifie en rien que c'est le problème. J'ai presque supprimé le contenu du répertoire ~ / mongo-data pour voir si cela m'a aidé. Heureux de me souvenir que cli args n'utilise parfois pas le signe "=".

Cloudish123
la source
3

Jusqu'à cette date, je pensais également que nous devons créer ce dossier / data / db pour démarrer la commande mongod.

Mais récemment, j'ai essayé de démarrer mongod avec la commande de service et cela a fonctionné pour moi et il n'était pas nécessaire de créer le répertoire / data / db.

service mongod start

Quant à vérifier l'état de mongod, vous pouvez exécuter la commande suivante.

service mongod status
Devendra Bhat
la source
3

Cette solution résout mon problème

  1. Créez un répertoire comme

    sudo mkdir -p / data / db

  2. Cela va créer un répertoire nommé db et essayer de démarrer avec des commandes

    sudo mongod

Si vous obtenez une autre erreur ou un problème avec le démarrage de mongod, vous pouvez trouver un problème comme

Impossible de configurer l'écouteur: SocketException: adresse déjà utilisée Si vous constatez qu'une autre erreur que vous devez tuer le processus en cours de mongod en tapant sur terminal comme

ps ax | grep mongod
sudo kill ps_number

et trouver le port d'exécution mongod et tuer le processus. Une autre façon est de créer un port spécifique lors du démarrage de mongod en tant que

sudo mongod --port 27018
Mehedi Abdullah
la source
2

Tapez "id" sur le terminal pour voir les identifiants utilisateur disponibles que vous pouvez donner, puis tapez simplement

"sudo chown -R idname / data / db"

Cela a fonctionné pour moi! J'espère que cela résout votre problème.

Prakhar Agrawal
la source
2

Dans les versions plus récentes de MongoDB, j'ai 3.2.10, il est stocké par défaut dans

/var/lib/mongodb

illcrx
la source
1
courir mongod --dbpath /var/lib/mongodbaide dans ces circonstances
santiago arizti
1

Après avoir (ré) installé le package d'outils, j'ai eu une erreur similaire sur un appareil Windows 10;

exception dans initAndListen: NonExistentPath: répertoire de données C: \ data \ db \ introuvable., terminaison

Solution Analogue à comme expliqué pour les systèmes linux: il suffit de créer le dossier pour pouvoir démarrer le mongod.exe(serveur mongoDB).

J'ai pensé que je pourrais le laisser aux personnes qui se retrouvent ici avec les mêmes termes de recherche sur un appareil Windows.

à
la source
1

Je voulais juste souligner ici que si vous essayez cela et que vous rencontrez mkdir: /data/db: Read-only file system, veuillez voir ce commentaire, qui m'a aidé: https://stackoverflow.com/a/58895373 .

De cette façon, si quelqu'un est sur cette réponse et contrôle F pour "lecture seule", il verra ceci

blubberbo
la source
0

Il existe un moyen vraiment stupide de créer ce problème, dont j'ai été le pionnier:

1) laissez votre mongo installé pendant un certain temps 2) revenez et le serveur ne fonctionne pas 3) essayez de le démarrer, mais n'utilisez pas sudo cette fois 4) mongo ne trouve pas les données / db / parce que maintenant il cherche dans le répertoire home de l'utilisateur au lieu du répertoire home

Oui, c'est vraiment stupide mais si ça fait un moment que vous n'êtes pas sur le système, cela peut vous faire trébucher.

Réponse courte: assurez-vous d'exécuter mongo avec le même répertoire personnel implicite

mtyson
la source