Mon ordinateur Ubuntu était tombé en panne et lorsque je l'ai redémarré, MongoDB ne fonctionnait pas. J'ai essayé les commandes suivantes et 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 disposition du site Web.)
Qu'est-il arrivé? Comment puis-je le réparer?
Le fichier journal vous indique que vous avez un "ancien fichier de verrouillage". MongoDB conserve un fichier verrouillé pendant son exécution. Il crée ce fichier quand il est démarré et le supprime quand il est arrêté. Lorsque l'ordinateur se bloque (ou que MongoDB se bloque, par exemple via kill
), ce fichier n'est pas supprimé et la base de données ne démarre donc pas. L'existence de ce fichier indique un arrêt impur de MongoDB.
Deux choses peuvent être faites:
S'il s'agit d'une machine de développement et que vous n'utilisez pas votre base de données (ni aucun de vos programmes), vous pouvez supprimer le fichier manuellement. Pour MongoDB 2.2.2 exécuté sur Ubuntu 12.10, il s'agit de /var/lib/mongodb/mongod.lock
. Pour les autres versions, le fichier peut se trouver dans un chemin différent ou s'appeler mongo.lock
.
La voie la plus sûre consiste à suivre le guide Durabilité et réparation de MongoDB. 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
tout ce que j'avais à faire était de courir: Sudo mongod --repair
puis:
Sudo Mongod
Sur la base de 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’emplacement de la base de données sur mon dossier Ubuntu, c’est-à-dire "data" (cd data); lister les fichiers (ls) * Ensuite, je vais supprimer le fichier "mongod.lock" qui a été créé automatiquement lorsque la base de données s'est écrasée, en créant le fichier "rm mongod.lock".
Après quoi, je vais émettre "./mongod" pour démarrer le dongon mongo ou mongo pour lancer le shell mongo. Et tout ira bien.
Vérifiez si vous avez assez d’espace libre sur votre serveur. S'il ne reste plus de place, mongodb ne commencera pas.
Merci les gars. Nous avons également rencontré un problème où MongoDB redémarrait encore et encore et se plaignait de old lock file . J'ai arrêté MongoDB à partir de la liste de services Windows, puis j'ai supprimé le fichier mongod.lock
. Après cela, j'ai pu démarrer le service MongoDB correctement et cela a bien fonctionné.
Ce n'est probablement pas la meilleure solution, mais si vous êtes désespéré, vous pouvez l'essayer. Il semblait que seul le journal était un problème pour moi, alors j'ai pris les mesures suivantes:
Une fois ces étapes terminées (moins de 5 minutes), j’étais opérationnel et toutes les données semblaient bien fonctionner.
Supprimer le fichier .lock
du répertoire de données mongo dbpath
fonctionne pour moi.
par exemple Sudo sudo rm {data-directory}/mongod.lock
Si vous n'avez pas utilisé d'outils de surveillance tels que Bluepill ou Monit etc, vous devrez faire face à ce problème car après une panne du serveur pour une raison quelconque, mongo n'a pas démarré son démon automatiquement, vous devez le faire fonctionner manuellement. comme Sudo service mongod restart
J'ai pensé à ce problème, mais il a besoin de quelques tâches supplémentaires, assurez-vous que votre chemin d'accès est bien à /etc/mongod.conf
avant de démarrer votre démon mongo.
Pour moi c'était
storage:
dbPath: /var/lib/mongodb
Lorsque je saisis la commande mongod
, il me montre MongoDB starting : pid=10795 port=27017 dbpath=/data/db 64-bit Host=xyz.com
assurez-vous que votre chemin d'accès est le même que celui mentionné dans /etc/mongod.conf
Pour ce faire, vous pouvez taper Sudo mongod --dbpath /var/lib/mongodb
puis utiliser la commande mongod
pour démarrer votre processus mongo sur le dbpath souhaité.
FYI: démarrer votre processus mongo avec la commande mongod