62 votes

Comment copier une base de données d'un serveur MongoDB à un autre ?

J'ai deux mongodbs dans un serveur différent, les deux commencent par --auth . Maintenant je veux copier une base de données d'un serveur à un autre.

> mongo
> use admin
> db.copyDatabase("mydb","mydb","another_server")

Il montre :

{ "errmsg" : "", "ok" : 0 }

Et :

> db.getLastError()
null

Il ne semble pas y avoir d'erreur, mais la copie ne réussit pas. Quelle est la commande correcte à utiliser ?

94voto

Justin Jenkins Points 10501

Si vous utilisez --auth vous devrez y inclure votre nom d'utilisateur/mot de passe...

Vous aussi doit être sur le serveur "destination" lorsque vous exécutez la commande.

db.copyDatabase(<from_db>, <to_db>, <from_hostname>, <username>, <password>);

Si tout cela ne fonctionne pas, vous pouvez essayer quelque chose comme la création d'un esclave de la base de données que vous voulez copier ...

9 votes

Le nom d'utilisateur et le mot de passe mentionnés sont pour la base de données et non pour le nom d'hôte PS : J'ai fait cette erreur, c'est pourquoi je l'ai mentionnée :)

0 votes

Merci ! C'était super simple. Dans mon cas, je n'avais pas de nom d'utilisateur ou de mot de passe, donc j'ai dû laisser ces paramètres désactivés.

1 votes

Ne puis-je pas copier la base de données dans le dossier de données de Mongo ?

50voto

Mike Shauneu Points 1625

À partir de Mongo version 3.2 vous pouvez le faire en utilisant mongodump/mongorestore :

mongodump  --host <from_host> --db <from_db> --archive | mongorestore --host <to_host> --archive

Des informations supplémentaires peuvent être trouvées sur le site :

https://docs.mongodb.com/manual/reference/program/mongodump/ https://docs.mongodb.com/manual/reference/program/mongorestore/

Pour rendre mongo distant joignable, vous pouvez créer un tunnel ssh vers celui-ci :

crée un tunnel vers le serveur mongodb distant et le tunnelise via le port 27117 vers le client local

ssh -fN -L 27117:localhost:27017 <remote_host> 

Dans ce cas, la commande à exécuter sur la machine locale que vous voulez restaurer pourrait être :

mongodump  --port 27117 --db <from_db> --archive | mongorestore --archive

24voto

marcelde Points 251

En plus de la réponse de Justin Jenkins, gardez à l'esprit que vous pouvez également utiliser un tunnel ssh si vous n'avez pas mongodb exposé au réseau (localhost uniquement).

J'utilise screen pour passer d'une "tâche" à l'autre. Pour plus de commodité, le tunnel ssh et mongo sont exécutés dans des onglets d'écran séparés.

étape 1 : créer un tunnel étape 1 : créer un tunnel

ssh username@yourdomainOrIP -L 27018:localhost:27017
...Enter your password

étape 2 :

mongo
use admin
db.copyDatabase(<fromdb>,<todb>,"localhost:27018",<username>,<password)

9 votes

Juste pour clarifier un peu ces instructions pour ceux qui n'ont jamais créé un tunnel SSH auparavant : 27018 est ici un port local arbitraire qui n'est pas utilisé. Pour s'assurer qu'il n'est pas utilisé, utilisez "lsof -ti:9000". Si des processus sont renvoyés, utilisez lsof pour trouver un port inutilisé. Le deuxième port 27017 dans cette réponse est le port sur lequel mongo est exécuté, sur l'hôte distant à partir duquel vous copiez. Pour vous assurer que c'est correct, connectez-vous à l'hôte distant et confirmez que mongo s'exécute sur ce port avec : "lsof -iTCP -sTCP:LISTEN | grep mongo".

11voto

user1587520 Points 481

En plus de la réponse de Mike Shauneu, si le nom de votre base de données sur le serveur de destination n'est pas le même que sur le serveur source, vous devez réécrire l'espace de noms. En combinaison avec l'authentification, j'ai réussi à faire fonctionner le système en utilisant la commande --uri qui nécessite une version récente de mongo (>3.4.6) :

mongodump --uri="mongodb://$sourceUser:$sourcePwd@$sourceHost/$sourceDb" --gzip --archive | mongorestore --uri="mongodb://$targetUser:$targetPwd@$targetHost/$targetDb" --nsFrom="$sourceDb.*" --nsTo="$targetDb.*" --gzip --archive

1voto

Ce qui suit a fonctionné pour moi pour copier d'un serveur Ubuntu à un autre serveur Ubuntu, tous deux exécutant MongoDB v4+ :

  1. La commande suivante doit être exécutée depuis le serveur sur lequel vous souhaitez restaurer la base de données :

    ssh -fN -L 27018:127.0.0.1:27017 <remote_host_ip>

  2. Maintenant nous avons mappé la base de données de notre serveur distant sur le port 27018 de notre serveur local. Ensuite, nous pouvons copier la base de données du serveur distant vers notre serveur de destination en utilisant la méthode MongoDB mongodump/mongorestore pipeline :

    mongodump --port 27018 --db <remote_db_name> --username <remote_db_username> --password <remote_db_password> --archive | mongorestore --username <destination_db_username> --password <destination_db_password> --archive

  3. [OPTIONNEL] Vous pouvez vérifier votre base de données restaurée comme suit :

    mongo --authenticationDatabase "admin" -u <destination_db_username> -p

    show dbs

Vérifiez si votre base de données existe dans la liste.

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