MongoDB

Backup de una BD
Antes que nada es necesario identificar las bases de datos de las cuales se debe hacer el backup, ésto se logra accediendo al shell del MongoDB con:

mongo --shell

Dentro del shell listamos las bases de datos con:

show databases

Con las bases de datos identificadas ejecutamos el sgte comando para cada una de ellas, el comando realiza un dump de la base de datos llamada "ejemplo" en el directorio "/backups/ejemplo/", cambiar "ejemplo" por el nombre de la base de datos.

mongodump --db ejemplo --out /backups/ejemplo/

Restaurar un backup
En el servidor con el MongoDB recién instalado ejecutamos el comando mongorestore, especificando el nombre de la BD y el directorio donde se encuentran los archivos json y bson generados durante el dump. No es necesario crear previamente la base de datos "ejemplo" ya que el comando la creará automáticamente.

mongorestore --db ejemplo --drop /backups/ejemplo/

Instalación y Configuración de una MongoBD en Ubuntu
MongoDB, aunque este en el repositorio de paquete de Ubuntu, debe ser incluido para tener la version mas actualizada. En este paso, agregaremos este repositorio oficial al servidor.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

Lo siguiente es agregar los detalles por medio de una lista al repositorio de Mongo para que se sepa de donde descargar los paquetes.

echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

El siguiente comando es para volver a cargar la base de datos de paquetes local

sudo apt-get update

Ahora procedemos a la instalacion, con el siguiente comando:

sudo apt-get install -y mongodb-org

Levantamos el servicio en el servidor:

sudo systemctl start mongodb

Y para habilitarlo, cada vez que el servidor sea iniciado, y el servicio este levantado:

sudo systemctl enable mongodb

Compruebe que el servidor este levantado con:

sudo systemctl status mongodb

Y puede pararlo cuando quiera con el comando:

sudo systemctl stop mongodb

Configuraciones Opcionales del servidor
Es posible que se necesite o quiera cambiar el puerto y la direccion en que escucha el servicio lo cual se encuentra en el siguiente archivo

/etc/mongod.conf

Lo abrimos, con el editor vim

sudo vim /etc/mongod.conf

En la siguiente parte del archivo, puede ver la parte que corresponde a la configuracion del puerto y direccion IP

net: port: 27017 //por default bindIp: 127.0.0.1 //por default
 * 1) network interfaces

Como opcional puede ser que necesite configurar, para seguridad del servidor, el firewall de Linux

sudo ufw allow port  i.e: ufw allow port 27017

Si quisiera permitir la conexion a una direccion IP determinada:

sudo ufw allow from  to any port 27017

Compruebe el estado de su Firewall

sudo ufw status

Si usted ha decidido permitir el acceso a MongoDB desde una dirección IP específica, la IP deberá aparecer abajo en lugar de Anywhere en la salida.

Autenticación del acceso al servidor MongoDB
Antes que nada para realizar esta parte es necesario parar el servicio mongodb, si estaba arriba(prendido):

sudo service mongodb stop

Para empezar, creamos una instancia de una MongoDB:

mongod --port  --dbpath /data/db1

Logicamente /data/db1 debe existir, podemos elegir el path que tengamos en el archivo /etc/mongo.conf

Siguiente, nos conectamos a la instancia MongoDB sin acceso de control:

mongo --port 

Creamos un usuario Administrador, capaz de crear nuevos usuarios:

use admin db.createUser( {    user: "myUserAdmin",    pwd: "abc123",    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  } )

Y un usuario Tester o Cliente que acceda a la BD, pero sin la autorización de crear nuevos usuarios:

use test db.createUser( {    user: "Tester",    pwd: "xyz123",    roles: [ { role: "readWrite", db: "test" }]  } )

Ahora podemos empezar reiniciando la instancia, para probar si es lo que estamos buscando:

mongod --auth --port  --dbpath /data/db1

Y accediendo de esta forma:

mongo --port  -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

Si todo funciona con los permisos y usuarios que queriamos, ahora solo tenemos que hacerlo permanente, abrimos el archivo de configuración de Mongo, con sudo vim /etc/mongo.conf

En la linea que tenga comentado #security, la descomentamos quitando el # y le agregamos lo siguiente: authorization: enabled, quedando algo asi:

security: authorization: enabled

Ahora solo tenemos que reiniciar el servicio. Si llegásemos a tener problema al reinciar el servicio, pruebe cambiar los permisos del path que indica en el archivo de configuracion /etc/mongo.conf

El siguiente comando puede ser el indicado:

sudo chown -R mongodb: 

Opcional(Android): Problemas con el Mecanismo de Autenticacion SCRAM-SHA-1
Es posible que se tuviera problemas usando el Mecanismo de Autenticacion SCRAM-SHA-1 en Proyectos Android. Una posible solucion, es cambiar a una version mas vieja de mecanismo como los es MONGODB-CR.

Se empieza sin tener habilitado el control de Autenticacion, despues seleccionamos la BD admin con use admin y luego ejecutamos los siguientes comando en el orden en que aparecen. Lo primero solo trae la variable con el esquema de autenticacion, que luego es modificado por la version 3, que corresponde a el mecanismo MONGODB-CR. Por si quisieras volver a SCRAM-SHA-1 le corresponde la version 5. var schema = db.system.version.findOne({"_id" : "authSchema"})

schema.currentVersion = 3

db.system.version.save(schema)

Luego creas un usuario, que tendra dicho mecanismo de autenticacion, y con los permisos que requieras, en tu BD. De la siguiente manera:

{ user: " ", pwd: " ", customData: { }, //optional. roles: [ { role: " ", db: " " } | " ", ... ] }

Podes corroborar que tenga el mecanismo MONGODB-CR al entrar en la base de datos admin, la cual te encuentras, haciendo db.system.users.find

Aca podras revisar que el usuario con el nombre y password que elegiste, tendra un campo que indique que el mecanismo que utiliza para autenticar al mismo, es MONGODB-CR.

Ahora para ingresar a tu base de datos con autenticacion MONGODB-CR habilitada :

mongodb://user:password@ipMongoDBServer:listeningPort "/myDatabase?authMechanism=MONGODB-CR