web-dev-qa-db-fra.com

Utilisez mongorestore pour restaurer une base de données sur MongoDB (3.4) avec --auth activé, erreur SASL

En utilisant mongorestore, j'essaie de restaurer une base de données MongoDB sur un nouveau serveur (les deux versions sont 3.4). Le nouveau serveur a -auth activé, vous devez donc vous connecter. La base de données n'existe pas, donc je veux que mongorestore la crée en utilisant l'option --db. Cela fonctionne lorsque l'autorisation n'est pas activée mais si j'active l'autorisation, la restauration échoue avec l'erreur suivante:

Échec: erreur de connexion au serveur db: le serveur a renvoyé une erreur à l'étape d'authentification SASL: l'authentification a échoué.

J'utilise un compte d'administrateur avec le rôle racine lorsque j'essaye la restauration.

La sauvegarde de prod et la restauration vers dev est une activité assez régulière pour nous, mais nous ne pouvons pas simplement supprimer la base de données existante et la recréer en raison de l'erreur ci-dessus, sauf si nous désactivons l'autorisation, ce qui n'a pas beaucoup de sens. Y a-t-il une meilleure façon de le faire/éviter les erreurs SASL/ne pas avoir à désactiver l'authentification?

9
user7593937

J'obtenais la même erreur et même si je ne pouvais pas comprendre ce qui n'allait pas restaurer avec mon utilisateur administrateur (mon intuition est un ! dans le mot de passe qui ne m'a pas aidé à s'échapper) J'ai pu restaurer en créant un nouvel utilisateur spécifiquement pour le rôle.

Dans mongo Shell:

>use admin;

>db.createUser({
  user: 'restoreuser',
  pwd: 'restorepwd',
  roles: ['restore']
});

Dans le terminal:

$mongorestore --Host databasehost:12345 --username restoreuser --password restorepwd --authenticationDatabase admin --db targetdb ./path/to/dump/
11
Zugwalt

Grâce à Adamo Tonete à Percona, il nous a aidés à résoudre ce problème. Si vous souhaitez restaurer une base de données en utilisant votre utilisateur administrateur avec le rôle racine, vous devez spécifier la base de données d'authentification et l'utilisateur dans la commande mongorestore.

mongorestore --Host hostname: 27017 -u adminuser -p pass --authenticationDatabase admin -d TargetDatabase/Data/TargetDatabaseRestore

Cela indique à mongo d'utiliser la base de données admin pour authentifier l'utilisateur que vous rencontrez. Si cet utilisateur dispose des droits appropriés, il pourra créer la nouvelle base de données.

3
user7593937

Accédez d'abord à votre port db to 4366 puis exécutez cette commande

mongorestore --port 4366 -u admin -p password --authenticationDatabase admin -d dealmoney /home/yash/Desktop/prodDump/teatingToProductionLastDump/dealmoney .
1
Yash