web-dev-qa-db-fra.com

Mise à niveau de MongoDB de la version 3.6 à la version 4.0: Comment corriger l'exception "La collection n'a pas d'uuid dans kvcatalog"?

Je lance un jeu de répliques MongoDB dans un environnement de conteneurisation orchestré par Rancher . Après avoir déployé la dernière mise à jour, MongoDB a été mis à jour à partir de 3.6.x à 4.0.x (dernier).

Non chemin de mise à nivea a été suivi et, par conséquent, lors de la tentative de liaison du volume contenant le stockage de la base de données, le service ne démarre pas, se fermant avec l'exception suivante:

STORAGE  [initandlisten] exception in initAndListen: MustDowngrade: Collection does not have UUID in KVCatalog. Collection: admin.system.version, terminating

J'obtiens le même résultat même en essayant de lancer mongod avec le --repair option. J'ai également essayé de restaurer le conteneur vers MongoDB 3.6.16 , mais la version du journal est maintenant incompatible.

Nous n'avons pas d'instantanés du volume, donc la restauration des données n'est pas une option (ce n'est pas un environnement de production). La seule solution que j'ai trouvée en ligne n'est pas applicable, car elle suggère d'utiliser mongodump et mongorestore, nécessitant une base de données en cours d'exécution avec le stockage de données attaché.

Je suis à court d'idées, de conseils pour résoudre ce problème?

5
hyperd

Très bien après environ 3 heures d'essayer de corriger exactement ce que vous décrivez, voici les étapes que j'ai suivies. Ici, je vais montrer comment conserver les données tout en passant à la version 3.6 et comment la mettre à jour 4.0 avec les données conservées.

La raison pour laquelle cela se produit pour les utilisateurs de mac est qu'il y avait une mise à jour pour les personnes utilisant brew ne peuvent plus télécharger Mongodb directement à partir de brew. Ensuite, les gens ont tendance à télécharger la nouvelle édition de la communauté à la place de brew, qui entre alors en conflit avec l'ancienne version du dossier 3.6 db toujours présente dans le répertoire. Au lieu de cela, vous devrez le télécharger à partir du site Web mongodb actuel:

https://www.mongodb.com/download-center/community

Ici, ce que vous voudriez faire, c'est tout télécharger manuellement. Suivez ces instructions ici, mais faites-le avec la version 3.6:

https://medium.com/@saurabhkumar_4718/install-mongodb-without-homebrew-on-mac-os-2a98b68ab09c

REMARQUE: lorsque vous copiez .bash_profile, assurez-vous que les commandes export ne sont pas

Une fois que vous avez installé avec succès 3.6 manuellement, vous pouvez mongodump pour être sûr, et/ou exporter toutes vos données mongo dans json avec mongoexport pour toutes les données que vous devez vraiment sauvegarder.

Après cela, vous pouvez à nouveau installer manuellement 4.0 en suivant exactement les mêmes étapes que précédemment effectuées pour 3.6

Cela a fonctionné pour moi sans avoir à faire de "mongorestore" car le dossier "db" était laissé seul et toutes mes données étaient là, mais peut-être que des étapes supplémentaires pourraient être nécessaires pour restaurer les données. Au pire, vous avez des fichiers .jsons qui doivent être réécrits. 'mongo --version' a également montré la bonne version :) J'espère que cela aide

0
Yosuke Hishinuma

J'étais en train de mettre à jour MongoDB de 3.6 à 4.2 avec Homebrew sur Mac OS, et j'ai rencontré cette situation similaire.

Depuis que la formule mongodb a été supprimée de homebrew-core, l'équipe de mongodb a maintenu un Custom Homebrew tap .

Les étapes suivantes sont ma solution pour mettre à niveau MongoDB de 3.6 à 4.2 avec Homebrew:

1) Désinstaller l'ancienne version mongodb de Homebrew

# If you run mongodb in background service, stop it first.
brew services stop mongodb
# If you have multiple version of mongodb, you might need to add `--force` option for deleting all of them at once.
brew uninstall mongodb

2) Installez le nouveau mongodb à partir du robinet Homebrew personnalisé

brew tap mongodb/brew
brew install [email protected]

3) Ajoutez [email protected] à votre PATH

echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile

4) Redémarrez votre terminal et exécutez mongod

5) Ouvrez un autre onglet ou une autre fenêtre de terminal pour exécuter mongodump

6) Terminer mongod

7) Désinstallez [email protected] et réinstallez mongodb-community

brew uninstall [email protected]
brew install mongodb-community

8) Supprimer les anciennes données avec l'ancienne structure de données mongo

rm -rf /data/db/*

9) Exécutez mongod

10) Ouvrez un autre onglet ou une autre fenêtre de terminal pour exécuter mongorestore /dump

Une fois mongorestore terminé, mongod sera terminé. Et vous pouvez exécuter mongodb en tant que service d'arrière-plan ou simplement réexécuter mongod. Ouvrez MongoDB avec mongo ou Robo 3T (anciennement Robomongo), vous verrez que vos données sont bonnes comme d'habitude.

J'espère que ça aide.

0
George