web-dev-qa-db-fra.com

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

J'ai deux mongodbs sur 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")

Ça montre:

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

Et:

> db.getLastError()
null

Semble aucune erreur, mais la copie n'a pas réussi. Quelle est la bonne commande à utiliser?

51
Freewind

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

De plus, vous devez être sur le serveur "de destination" lorsque vous exécutez la commande.

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

Si tout cela ne fonctionne pas, vous voudrez peut-être essayer quelque chose comme créer un esclave de la base de données que vous souhaitez copier ...

84
Justin Jenkins

À 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:

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

Pour rendre accessible le mongo distant, vous pouvez lui créer un tunnel ssh:

crée un tunnel vers le serveur mongodb distant et le tunnel 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 souhaitez restaurer pourrait être:

mongodump  --port 27117 --db <from_db> --archive | mongorestore --archive
25
Mike Shauneu

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 l'écran pour basculer entre les "tâches". pour ma commodité, le tunnel ssh et mongo sont exécutés dans des onglets d'écran séparés.

é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)
22
marcelde