2011-03-31 22 views
44

Tengo dos mongodbs en un servidor diferente, ambos comienzan con --auth. Ahora quiero copiar un db de un servidor a otro.¿Cómo copio una base de datos de un servidor MongoDB a otro?

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

Muestra:

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

Y:

> db.getLastError() 
null 

parece que no hay error, pero la copia no tiene éxito. ¿Cuál es el comando correcto para usar?

Respuesta

73

Si está utilizando --auth, tendrá que incluir su nombre de usuario/contraseña en allí ...

También usted debe estar en el servidor "cercanos" al ejecutar el comando .

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

Si todo esto no funciona, es posible que desee probar algo así como la creación de un esclavo de la base de datos que desea copiar ...

+0

Gracias tanto, se funciona ~ – Freewind

+2

El nombre de usuario y la contraseña mencionados son para la base de datos no para el nombre de host PD: Cometí este error, mencionándolo :) – shammerw0w

+1

muchas gracias, respuesta muy útil :) –

16

Además de la respuesta de Justin Jenkins tener en cuenta que también puede usar un túnel ssh si no tiene mongodb expuesto a la red (solo localhost)

Uso la pantalla para alternar entre "tareas". para mi conveniencia, el túnel ssh y el mongo se ejecutan en pestañas de pantalla separadas.

paso 1: crear un túnel

ssh [email protected] -L 27018:localhost:27017 
...Enter your password 

paso 2:

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

Solo para aclarar estas instrucciones un poco para aquellos que nunca antes han creado un túnel SSH: 27018 aquí hay un puerto local arbitrario que no se usa. Para asegurarse de que no se utiliza, use "lsof -ti: 9000". Si se devuelven procesos, use lsof para encontrar un puerto no utilizado. El segundo puerto 27017 en esta respuesta es el puerto en el que se está ejecutando mongo, en el host remoto desde el que está copiando. Para asegurarse de que esto sea correcto, inicie sesión en el host remoto y confirme que mongo se está ejecutando en este puerto con: "lsof -iTCP -sTCP: LISTEN | grep mongo". – huwiler

11

A partir de Mongo versión 3.2 puede hacerlo mediante el uso de mongodump/mongorestore:

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

información adicional podría se encuentra en:

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

Para hacer mongo a distancia alcanzable puede crear túnel SSH a la misma:

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

En este caso, el comando podría ser:

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