Alternativas para renombrar una base de datos en MongoDB

Tenemos varias opciones:

  1. Tenemos el comando copyDatabase, con autentificación hay que revisar bien los permisos del usuario con el que queremos hacer la copia, en la documentación explica con detalle los permisos necesarios dependiendo de la base base de datos.

 

https://docs.mongodb.com/v3.0/reference/method/db.copyDatabase/

  1. Tenemos la opción de hacer un mongodump y un mongorestore:
         $ mongodump -d old_db_name -o mongodump/

         $ mongorestore -d new_db_name mongodump/old_db_name

 

http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/

 

  1. Luego podemos copiar colección a colección:
use admin   

db.runCommand({renameCollection: "[db_old_name].[collection_name]", to: "[db_new_name].[collection_name]"})

 

  1. O utilizar un el método agragate
db.oldCollection.aggregate([{$match: {}}, {$out: "newCollection"}])db.oldCollection.drop()

 

Precargando los datos en memoria en Mongodb

Tenemos varias opciones:

Touch: Solo válido para  l motor de almacenaje MMAPv1. No es compatible WiredTiger.

db.runCommand({ touch: "records", data: true, index: true })

Esto carga en memoria tanto los datos como los índices.

Cargar un índice especifico: En ocasiones no tenemos suficiente espacio en RAM para cargar todos los datos.

db.usuarios.find({}, {"_id" : 0, "clave" : 1, "fecha" : 1}). hint({"clave" : 1, "fecha" : 1}).explain()

 

Imaginemos que tienes un índice sobre el campo clave y fecha y queremos cargarlo en memoria. Con el comando explain forzaremos a mongod a iterar sobre todo el resultado. Se debe especificar que solo se quiere regresar los campos del índice (el segundo argumento del find) o cargaremos todos  los documentos en memoria.

Mover la base de datos a memoria: Se puede poner toda la base de datos en la RAM antes de iniciar mongo con el comando dd

     for file in /data/db/nombredb.*     

    >do    

    >dd if=$file of=/dev/null     

   > done

 

Esta técnica es buena si hay suficiente espacio en memoria para cargar los datos.

 

Cambiar las opciones de montaje de una partición

En este caso cambiamos la opciones de la partición mongodata sobre la que tenemos la base de datos de mongo

Editamos el fichero /etc/fstab

Añadimos las opciones necesarias, en este caso

/dev/xvdb1 /mongodata xfs defaults,noatime 0 0

Y lo volvemos a montar la partición, como root

mount -o remount /mongodata

Para ver las modificaicones:

[root@mvtv ~]# mount

 

mongorestore Error creating index admin.system.version: 13 err: “not authorized to create index on admin.system.version”

Haciendo un restore de la base de datos en mongo 2.6.9, nos hemos encontrado con este error, es porque el rol de root no tiene el rol de restore.

El rol de root no se puede modificar, con lo cual hay que añadir al usuario el rool de restore.

En nuestro caso

db.grantRolesToUser(“admin”, [ “restore” ])

Con esto ya nos permite hacer el restore