78 votes

MongoDB ne démarre pas après une panne de serveur

Mon ordinateur Ubuntu est tombé en panne, et lorsque je l'ai redémarré, MongoDB ne fonctionnait pas. J'ai essayé les commandes suivantes, et j'ai obtenu le résultat suivant :

$ mongo
Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed

$ service mongodb status
mongodb stop/waiting

$ service mongodb restart
stop: Unknown instance: 
start: Rejected send message, 1 matched rules; type="method_call",
       sender=":1.57" (uid=1000 pid=2227 comm="start mongodb ")
       interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)"
       requested_reply="0"
       destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

$ tail /var/log/mongodb/mongodb.log
[initandlisten] exception in initAndListen: 12596 old lock file, terminating
dbexit: 
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] shutdown: going to close sockets...
[initandlisten] shutdown: waiting for fs preallocator...
[initandlisten] shutdown: closing all files...
[initandlisten] closeAllFiles() finished
dbexit: really exiting now

(Sortie reformatée pour correspondre à la mise en page du site web).

Que s'est-il passé ? Comment puis-je le réparer ?

178voto

Hosam Aly Points 14797

Le fichier journal vous indique que vous avez une "ancien fichier de verrouillage" . MongoDB conserve un serrure pendant qu'il est en cours d'exécution. Il crée ce fichier lorsqu'il est lancé, et le supprime lorsqu'il est arrêté. Lorsque l'ordinateur tombe en panne (ou que MongoDB tombe en panne, par exemple par l'intermédiaire de kill ), ce fichier n'est pas supprimé, et donc la base de données ne démarre pas. L'existence de ce fichier indique un arrêt malpropre de MongoDB.

Deux choses peuvent être faites :

  1. S'il s'agit d'une machine de développement et que vous n'avez pas utilisé votre base de données (et vos programmes non plus), vous pouvez supprimer le fichier manuellement. Pour MongoDB 2.2.2 fonctionnant sur Ubuntu 12.10, il se trouve à l'adresse suivante /var/lib/mongodb/mongod.lock . Pour les autres versions, le fichier peut se trouver dans un chemin différent ou être nommé mongo.lock .

  2. La voie la plus sûre est de suivre la méthode de MongoDB Durabilité et réparation guide. En résumé, pour une machine avec la configuration ci-dessus, vous devez exécuter les commandes suivantes :

    sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
    sudo service mongod start

2 votes

1 votes

Cher @HosamAly, Comment puis-je résoudre ce problème, parce que le serveur se bloque habituellement. Je dois donc le faire manuellement après le blocage du serveur ? C'est si mauvais, parce que les autres bases de données (mysql, postgresql,..) démarrent toujours avec succès après le blocage du serveur.

1 votes

@JohnNguyen Vous pourriez l'automatiser, mais je vous le déconseille, car vous n'aurez pas l'occasion d'examiner les dommages qui peuvent être causés par le processus de "réparation".

3voto

bobbydoogle Points 36

Tout ce que j'avais à faire était de courir : sudo mongod --repair

alors :

sudo mongod

3voto

samson ojo Points 41

D'après mon expérience, je supprime généralement le fichier "mongod.lock" qui se trouve dans le dossier de la base de données - Dans mon cas :

*Je navigue jusqu'à l'endroit où la base de données est installée sur mon ubuntu, c'est-à-dire le dossier "data".(cd data) ; liste les fichiers (ls) *Puis, je supprime le fichier "mongod.lock" qui a été automatiquement créé lorsque la base de données a planté, en lançant "rm mongod.lock".

Après quoi, je lancerai "./mongod" pour démarrer le deamon mongo ou mongo pour démarrer le shell mongo. Et tout ira bien.

1voto

Jeremy Richards Points 530

Vérifiez si vous avez assez d'espace libre sur votre serveur. S'il n'y a pas d'espace libre, mongodb ne démarrera pas.

1voto

Touseef Murtaza Points 106

Si vous n'avez pas utilisé d'outils de surveillance comme Bluepill o Monit etc vous serez confronté à ce problème car après un crash du serveur pour une raison quelconque, mongo n'a pas démarré son démon automatiquement et vous devez le faire fonctionner manuellement, comme par exemple sudo service mongod restart J'ai résolu ce problème mais il faut encore effectuer quelques tâches, assurez-vous que votre dbpath à l'adresse /etc/mongod.conf avant de lancer votre démon mongo.

Pour moi, c'était

storage:
  dbPath: /var/lib/mongodb

Quand j'entre mongod La commande me montre MongoDB starting : pid=10795 port=27017 dbpath=/data/db 64-bit host=xyz.com Assurez-vous que votre chemin de base de données est le même que celui mentionné dans /etc/mongod.conf.

Pour ce faire, vous pouvez taper sudo mongod --dbpath /var/lib/mongodb et ensuite utiliser mongod pour démarrer le processus mongo à l'emplacement souhaité.

FYI : démarrez votre processus mongo avec mongod commande

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X