MongoDB: exception dans initAndListen: 20 Tentative de création d'un fichier de verrouillage sur un répertoire en lecture seule: / data / db, arrêt

146

J'ai créé /data/dbdans le répertoire racine et j'ai couru ./mongod:

[initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] now exiting
[initandlisten] shutting down with code:100
whinytween96
la source
4
ressemble à un problème d'autorisations. L'utilisateur exécutant mongod a-t-il l'autorisation d'écrire dans le répertoire / data / db? Partagez la sortie de ls -ld /data/dbet idainsi nous pouvons vous conseiller.
Bjorn Roche
drwxr-xr-x 2 root root 4096
whinytween96
uid = 1000 (utilisateur) gid = 1000 (utilisateur) groupes = 1000 (utilisateur), 4 (adm), 24 (cdrom), 27 (sudo), 30 (dip), 46 (plugdev), 113 (lpadmin), 128 (sambashare)
whinytween96
@BjornRoche merci pour la -ldpartie :)
Skynet
@BjornRoche ma sortie est drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dbet j'obtiens toujours l'erreur. Des idées?
Blake

Réponses:

278

Le problème est que le répertoire que vous avez créé /data/dbappartient à l'utilisateur root et n'est accessible en écriture que par l'utilisateur root, mais vous exécutez mongod comme vous-même. Il existe plusieurs façons de résoudre ce problème, mais en fin de compte, vous devez donner au répertoire en question les bonnes autorisations. Si c'est pour la production, je vous conseillerais de vérifier la documentation et d'y réfléchir attentivement - vous voudrez probablement faire attention.

Cependant, si ce n'est que pour tester et que vous avez juste besoin de cela pour fonctionner et continuer, vous pouvez essayer ceci, ce qui rendra le répertoire accessible en écriture par tout le monde:

> sudo chmod -R go+w /data/db

ou ceci, ce qui rendra le répertoire qui vous appartiendra:

> sudo chown -R $USER /data/db
Bjorn Roche
la source
4
Je pense que quelqu'un peut avoir besoin -Rde modifier tous les /data/dbfichiers à l'intérieur de manière récursive.
YongHao Hu
2
Merci pour cela. Je l'ai essayé et j'ai toujours la même erreur
Samuel Dare
1
Ce sujet est déjà un peu vieux, mais pour moi, l'utilisation a chmodgénéré une nouvelle erreur initAndListen : operation not permitted, mais a chownfonctionné.
bachinblack
chown l'a fait pour moi aussi
dwagnerkc
C'est une mauvaise pratique de donner 777 umask à un répertoire. Vous pouvez définir 755 et ça marchechmod -R 755 /data/db
Juan-Kabbali
60

Sur un Mac, je devais faire ce qui suit:

sudo chown -R $USER /data/db
sudo chown -R $USER /tmp/

car il y avait aussi un fichier dans /tmplequel Mongo avait également besoin d'accéder

Santiago Martí Olbrich
la source
2
Fonctionne dans Fedora 28 Linux
Samuel Ivan
2
Cela devrait être au top
Yashwanth Kambala
cela l'a fait aussi pour moi.
Canovice
25

Si votre système utilise SELinux, assurez-vous que vous utilisez le bon contexte pour le répertoire que vous avez créé:

ls -dZ /data/db/
ls -dZ /var/lib/mongo/

et clonez le contexte avec:

chcon -R --reference=/var/lib/mongo /data/db
drrossum
la source
1
Tu as sauvé ma journée! Merci beaucoup
Keerthivasan
2
ls -dZ / var / lib / mongodb / pour les versions ultérieures de mongo
espeed
17

J'ai rencontré le même problème et la solution suivante a résolu ce problème. Vous devriez essayer la solution suivante.

sudo mkdir -p / data / db
sudo chown -R 'nom d'utilisateur' / data / db

Hamdi Bayhan
la source
9

entrez la description de l'image iciTout d'abord, arrêtez tous les services mongoDB , puis créez un répertoire sur /, cela signifie root, si vous ne l'avez pas, et supprimez également le fichier de port. donnez toutes les autorisations à ce répertoire, devenez le propriétaire de ce répertoire, exécutez la commande ci-dessous:

sudo service mongod stop
sudo rm -rf /tmp/mongod*
sudo mkdir -p /data/db
sudo chmod -R a+wxr /data
sudo chown -R $USER:$USER /data

Maintenant que vous avez terminé, démarrez simplement le service MongoDB, si cela ne vous aide pas, essayez de changer le port comme:

sudo service mongod restart && mongod # if didn't help run below cmd
mongod --port 27018

Remarque: Pour moi, tout cela fonctionne et j'espère que cela fonctionnera pour vous, mec!

Code
la source
5

Corrigez les permissions de /data/db(ou /var/lib/mongodb):

sudo chown -R mongodb: /data/db

puis redémarrez MongoDB par exemple en utilisant

sudo systemctl restart mongod

Dans le cas où cela ne résout pas le problème, vérifiez votre message d'erreur si vous utilisez un répertoire de données différent de / var / lib / mongodb. Dans ce cas, exécutez

sudo chown -R mongodb: <insert your data directory here>

la source

plcosta
la source
4

Belles solutions, mais je me demande pourquoi personne ne donne la solution pour les fenêtres.

Si vous utilisez Windows, il vous suffit de "Exécuter en tant qu'administrateur" la cmd.

Enrique Benito Casado
la source
6
Je pense que c'est parce que les gens n'exécutent généralement pas de serveurs de base de données sur Windows.
Blake le
1
Aussi, c'est une mauvaise idée d'exécuter une base de données en tant qu'administrateur / root, vérifiez d'autres commentaires ici comme celui-ci pour plus de détails
Nino Filiu
4

Si vous vérifiez vos journaux mongodb et que vous obtenez une telle erreur, suivez simplement les étapes comme je l'ai fait. Cela se produit en raison de problèmes d'autorisation avec votre /data/dbrépertoire. J'utilise ubuntu16.04 et je trouve une solution en exécutant deux commandes simples comme suit.

Étape 1: Donnez l'autorisation au répertoire / data / db:

sudo chmod -R 0777 /data/db

Étape 2: Essayez de démarrer le service mongod en tant que:

sudo service mongod start

Étape 3: Vérifiez l'état du service mongod:

sudo service mongod status
Jitendra
la source
2
L'étape 1 accordera des autorisations de lecture / écriture / exécution à tous les utilisateurs. Cela ne devrait pas être utilisé.
Jonas Franz
Merci, @JonasFranz, pour vos commentaires, donc dans ce cas, nous pouvons utiliser l'autorisation 0755 pour le serveur de production. S'il vous plait corrigez moi si je me trompe.
Jitendra
3

Si vous n'avez pas besoin d'avoir les répertoires de base de données à la racine, vous pouvez créer data/dbdans votre répertoire personnel ( mkdir -p ~/data/db).

Ensuite, vous pouvez démarrer le serveur MongoDB avec l' --dbpathoption:

mongod --dbpath=$(echo ~)/data/db

(Cela suppose que vous le démarrez à partir d'un terminal. Pour une raison étrange, mongodn'accepte pas ~ comme chemin du répertoire personnel, d'où la supercherie de substitution d'écho bash, vous pouvez aussi bien écrire /home/yourusername/data/db)

En fait, cela n'a pas à être ~/data/db, cela peut être où vous voulez et de cette façon, vous pouvez avoir plusieurs chemins de base de données et tout organiser bien. Ce n'est peut-être pas la meilleure option pour la production (selon ce que vous voulez faire), mais pour le développement fonctionne bien.

Kresimir
la source
3

J'ai traité le même problème:

Accédez au répertoire MongoDB qui contient le binrépertoire et exécutez:

sudo bin/mongod 

En exécutant MongoDB en tant qu'utilisateur root, vous devrez peut-être entrer le mot de passe root. Si vous ne pouvez toujours pas exécuter MongoDB, vérifiez les autorisations pour le répertoire de données de MongoDB. Entrer:

ls -ld /data

ou saisissez ls -l /les autorisations pour tous les répertoires et fichiers du répertoire, y compris le /datarépertoire.

Le mode d'autorisation pour l'utilisateur root doit être " rwx", ce qui signifie que l'utilisateur root est capable de lire, d'écrire et d'exécuter les fichiers. Pour y parvenir, nous utilisons:

chmod 755 /data 

755est une notation octale pour définir les permissions du /datarépertoire sur " rwxr-xr-x", ce qui signifie que l'utilisateur root peut lire, écrire et exécuter, alors que le "groupe" et "tout le monde" ne peuvent lire et exécuter que.

Remarque: lorsque vous ne pouvez pas faire cela, tapez à la place:

sudo chmod 755 /data   

pour définir l'autorisation en tant qu'utilisateur root.

Ensuite, une fois cette étape terminée, récupérez les modes d'autorisation en utilisant:

ls -ld /data

qui devrait ressembler à:

drwxr-xr-x  3 root  wheel  102 Mar  3 17:00 /data

Vous n'avez pas à vous soucier du " d" au début, et notez que les permissions reflètent " rwxr-xr-x".

Vous pouvez maintenant revenir au répertoire MongoDB et taper:

sudo bin/mongod  

pour exécuter MongoDB.

yifan li
la source
2
Mauvaise idée, ne l'exécutez JAMAIS en tant que sudo. Il existe de meilleures solutions qui gèrent l'utilisateur / groupe vers mongod ou mongodb en fonction de votre distribution. N'utilisez pas cette solution.
Andy
2

il vous suffit d'exécuter la commande en tant que super utilisateur:

tapez simplement depuis le terminal: sudo su mongod

David Noleto
la source
1
C'est toujours une mauvaise idée d'exécuter des programmes comme celui-ci en tant que superutilisateur. Il est préférable de corriger les autorisations des dossiers
Jason
2

Si vous êtes sous Windows et que vous essayez de configurer MongoDB, exécutez cmd en tant qu'admnistrator est la voie à suivre, comme Enrique l'a suggéré ci - dessus, voir ici

Adewale Olaoye
la source
-1

Cela a fonctionné pour moi dans Ubuntu LTS 20.04:

$ sudo service mongod start
Sagar Kumar
la source
1
Veuillez expliquer pourquoi vous pensez que cela fonctionnera aussi pour les autres!
sauhardnc
1
Veuillez décrire la résolution plus en détail avec plus d'informations telles que l'explication de la raison réelle, l'ajout d'un extrait de code de travail et les étapes à suivre pour éliminer les problèmes. Pour plus de détails, consultez les directives de StackOverflow.
Kapil Raghuwanshi