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

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

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


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

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


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!


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


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.


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

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.


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.


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


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


-1

Cela a fonctionné pour moi dans Ubuntu LTS 20.04:

$ sudo service mongod start

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.