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?
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 ...
À 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
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)