2012-05-23 14 views
6

Estoy tratando de volcar una base de datos desde otro servidor (esto funciona bien), luego restaurarlo en un nuevo servidor (esto no funciona bien).Mongodump y mongorestore; campo no encontrado

La primera vez que ejecute:

mongodump --host -d 

Esto crea una carpeta dump/db que contiene todos los documentos BSON.

A continuación, en la carpeta de descarga, estoy corriendo:

mongorestore -d dbname db 

Esto funciona y itera a través de los archivos, pero me sale este error en dbname.system.users

Wed May 23 02:08:05 { key: { _id: 1 }, ns: "dbname.system.users", name: "_id_" } 
Error creating index dbname.system.usersassertion: 13111 field not found, expected type 16 

¿Alguna idea de cómo resolver este ?

Respuesta

7

¿Hay alguna posibilidad de que la fuente y el destino sean versiones diferentes?

En cualquier caso, para evitar esto, restaure las colecciones individualmente utilizando el distintivo -c en el DB de destino y luego cree los índices posteriormente. La colección del sistema es la que se usa para los índices, por lo que es bastante fácil de recrear; pruébelo una vez que todo lo demás se haya restaurado, y si aún falla, siempre puede recrear los índices relevantes.

+0

Gracias! Funcionó perfecto. – dzm

+0

Sí, tuve un problema similar al tratar de 'mongorestore' a MongoHQ desde local. Degradada local a través de 'brew' y no más errores. –

+0

¿Por versión quiere decir versión de base de datos, o algún tipo de versión de esquema? ¿La versión de 'mongorestore' ejecutada localmente importa, o solo las versiones de y necesita estar sincronizado? –

9

Si es realmente diferentes versiones, use la opción --noIndexRestore. Y crea todo el índice después de eso.

+1

Funcionó bien para mí –

3

El problema también podría causado por este error en versiones anteriores de Mongo (En mi caso fue 2.0.8):

https://jira.mongodb.org/browse/SERVER-7181

Básicamente, se obtiene 13111 field not found, expected type 16 de error cuando debería ser en realidad impulsando para ingresar sus detalles de autenticación.

Y ejemplo de cómo me fijo:

[email protected]:/# mongorestore /backups/demand/ondemand.05-24-2013T114223/ 
connected to: 127.0.0.1 
[REDACTED] 
Fri May 24 11:48:15  going into namespace [test.system.indexes] 
Fri May 24 11:48:15 { key: { _id: 1 }, ns: "test.system.users", name: "_id_" } 
Error creating index test.system.usersassertion: 13111 field not found, expected type 16 
# Error when not giving username and password 

[email protected]:/# mongorestore -u fakeuser -p fakepassword /backups/demand/ondemand.05-24-2013T114223/ 
connected to: 127.0.0.1 
[REDACTED] 
Fri May 24 11:57:11 /backups/demand/ondemand.05-24-2013T114223/test/system.users.bson 
Fri May 24 11:57:11  going into namespace [test.system.users] 
1 objects found 
# Works fine when giving username and password! :) 

Esperanza que ayuda a cualquier persona que sea cuestión no ser arreglados por los 2 anteriores respuestas!

0

Esto también puede suceder si está tratando de mongorestore en MongoDB 2.6+ y el volcado que está tratando de restaurar contiene una tabla system.users en cualquier base de datos que no sea admin. En MongoDB 2.2 y 2.4 las colecciones system.users podrían ocurrir en cualquier base de datos. La migración del esquema de autenticación asociado con MongoDB 2.6 movió a todos los usuarios a la tabla system.users en la base de datos de administración, pero dejó atrás las tablas system.users en las otras bases de datos (MongoDB 2.6 simplemente las ignora). Esto parece causar esta afirmación al importar a MongoDB 2.6.