Instalar MongoDB en Linux es realmente sencillo.
MongoDB es un motor de BD noSQL, es una solución Big Data que merece una mención especial, en otra entrada veremos las diferencias conceptuales respecto a un motor SQL, pero hoy vamos a ver como arrancar una instalación básica y algunos conceptos iniciales.
Lo primero que vamos a hacer es obtener el software desde la URL:
https://www.mongodb.org/downloads
Seleccionamos el Sistema Operativo y descargamos, en este caso la instalación la haremos sobre CentOS 6.4 Linux.
En algunos repositorios Linux es posible encontrar MongoDB, pero no lo recomiendo porque la instalación es realmente sencilla y si queremos tener más de una instancia MongoDB en la misma máquina (algo no recomendable en un entorno de producción), perdemos mucho el control de donde están las cosas realmente.
Antes de comenzar necesitamos una paquetería básica que necesita como dependencia:
[root@oradb ~]# yum install openssl
Una vez realizada la instalación de la paquetería nos logamos en el usuario que será el propietario de la instalación y comenzamos a trabajar:
[mongo@oradb ~]$ ls
mongodb-linux-x86_64-rhel62-3.0.7.tgz
[mongo@oradb ~]$ pwd
/home/mongo
[mongo@oradb ~]$ ls
mongodb-linux-x86_64-rhel62-3.0.7.tgz
[mongo@oradb ~]$ tar xfz mongodb-linux-x86_64-rhel62-3.0.7.tgz
[mongo@oradb ~]$ ls
mongodb-linux-x86_64-rhel62-3.0.7 mongodb-linux-x86_64-rhel62-3.0.7.tgz
[mongo@oradb ~]$ ls -l
total 50188
drwxrwxr-x 3 mongo mongo 4096 Nov 23 17:00 mongodb-linux-x86_64-rhel62-3.0.7
-rw-rw-r-- 1 mongo mongo 51385386 Nov 23 16:59 mongodb-linux-x86_64-rhel62-3.0.7.tgz
[mongo@oradb ~]$ ln -s mongodb-linux-x86_64-rhel62-3.0.7 mongodb
[mongo@oradb ~]$ ls -l
total 50188
lrwxrwxrwx 1 mongo mongo 33 Nov 23 17:00 mongodb -> mongodb-linux-x86_64-rhel62-3.0.7
drwxrwxr-x 3 mongo mongo 4096 Nov 23 17:00 mongodb-linux-x86_64-rhel62-3.0.7
-rw-rw-r-- 1 mongo mongo 51385386 Nov 23 16:59 mongodb-linux-x86_64-rhel62-3.0.7.tgz
Una vez descomprimido y creado un enlace simbólico a la versión actual añadimos la ruta al PATH para que los binarios sean encontrados, quedando .bash_profile de la siguiente forma:
[mongo@oradb ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
PATH=$HOME/mongodb/bin/:$PATH
export PATH
Salimos de la sesión y volvemos a entrar para que se carguen las variables de entorno (también podríamos cargar .bach_profile sin salir pero quedaría algo sucia la variable de entorno PATH).
Ahora ya podemos arrancar MongoDB, para hacerlo debemos decirle muy pocas cosas:
- dbpath, la ruta donde serán alojados los ficheros de datos que contendrán las BDs.
- logpath, ruta fichero de log donde se escribirán los mensajes.
- fork, evita que la consola quede bloqueada creando un proceso nuevo.
Existen otros parámetros pero de momento dejaremos que tome los valores por defecto, creamos algunos directorio y arrancamos con:
[mongo@oradb ~]$ mkdir -p /home/mongo/db1/data /home/mongo/db1/logs /home/mongo/db1/conf/
[mongo@oradb ~]$ mongod --dbpath /home/mongo/db1/data --logpath /home/mongo/db1/logs/mongod.log --fork
about to fork child process, waiting until server is ready for connections.
forked process: 3417
child process started successfully, parent exiting
Ahora ya podemos conectarnos a MongoDB utilizando el puerto por defecto 27017 (que no es necesario especificar):
[mongo@oradb ~]$ mongo
MongoDB shell version: 3.0.7
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2015-11-23T17:32:10.125+0100 I CONTROL [initandlisten]
2015-11-23T17:32:10.125+0100 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-11-23T17:32:10.125+0100 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-11-23T17:32:10.125+0100 I CONTROL [initandlisten]
2015-11-23T17:32:10.125+0100 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-11-23T17:32:10.125+0100 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-11-23T17:32:10.125+0100 I CONTROL [initandlisten]
>
Ahora estamos en una consola que permite interactuar con MongoDB, crear BD, colleciones (el equivalente a tablas) y documentos dentro de las colecciones (lo que sería los registros), por ejemplo:
> show databases;
local 0.078GB
> use midb
switched to db midb
> db.col1.insert({id:1, valor:"Valor1"});
WriteResult({ "nInserted" : 1 })
> db.col1.find();
{ "_id" : ObjectId("565340663cbe6ee72f223387"), "id" : 1, "valor" : "Valor1" }
> show databases;
local 0.078GB
midb 0.078GB
> exit
bye
Los comandos utilizados para insertar «insert» y buscar «find», son comandos CRUD, pueden parecer un poco extraños a primera vista pero el algo realmente potente. Dejo la URL de la documentación:
https://docs.mongodb.org/manual/core/crud-introduction/
MongoDB no tiene nada que ver con las bases de datos SQL, el simple hecho de realizar una inserción crea la colección y la propia base de datos.
Como se habrá visto tampoco hemos tenido que escribir usuario y contraseña para comenzar a trabajar.
Para parar MongoDB simplemente:
[mongo@oradb ~]$ mongod --dbpath /home/mongo/db1/data --logpath /home/mongo/db1/logs/mongod.log --shutdown
2015-11-23T17:38:37.887+0100 I CONTROL log file "/home/mongo/db1/logs/mongod.log" exists; moved to "/home/mongo/db1/logs/mongod.log.2015-11-23T16-38-37".
killing process with pid: 3417
Podemos simplificar la linea de comando externalizando las configuraciones, para ello crearemos un fichero de configuración que contendrá:
[mongo@oradb ~]$ cat /home/mongo/db1/conf/mongod.conf
dbpath=/home/mongo/db1/data
port=27017
journal=true
fork=true
logpath=/home/mongo/db1/logs/mongod.log
Aquí hemos definido 2 parámetros más:
- port, indica el puerto que estará escuchando MongoDB
- journal, muy útil para prevenir inconsistencias en caso de parada brusca del proceso mongod. Si no lo utilizásemos un kill -9 generaría algo de trabajo adicional para levantar de nuevo MongoDB.
La llamada de arranque, revisión de logs y parada pasa a ser:
[mongo@oradb ~]$ mongod --config /home/mongo/db1/conf/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 5882
child process started successfully, parent exiting
[mongo@oradb ~]$ tail -f /home/mongo/db1/logs/mongod.log
2015-11-23T17:51:24.397+0100 I CONTROL [initandlisten] db version v3.0.7
2015-11-23T17:51:24.397+0100 I CONTROL [initandlisten] git version: 6ce7cbe8c6b899552dadd907604559806aa2e9bd
2015-11-23T17:51:24.397+0100 I CONTROL [initandlisten] build info: Linux ip-10-101-218-12 2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 BOOST_LIB_VERSION=1_49
2015-11-23T17:51:24.397+0100 I CONTROL [initandlisten] allocator: tcmalloc
2015-11-23T17:51:24.397+0100 I CONTROL [initandlisten] options: { config: "/home/mongo/db1/conf/mongod.conf", net: { port: 27017 }, processManagement: { fork: true }, storage: { dbPath: "/home/mongo/db1/data", journal: { enabled: true } }, systemLog: { destination: "file", path: "/home/mongo/db1/logs/mongod.log" } }
2015-11-23T17:51:24.400+0100 I INDEX [initandlisten] allocating new ns file /home/mongo/db1/data/local.ns, filling with zeroes...
2015-11-23T17:51:24.469+0100 I STORAGE [FileAllocator] allocating new datafile /home/mongo/db1/data/local.0, filling with zeroes...
2015-11-23T17:51:24.469+0100 I STORAGE [FileAllocator] creating directory /home/mongo/db1/data/_tmp
2015-11-23T17:51:24.475+0100 I STORAGE [FileAllocator] done allocating datafile /home/mongo/db1/data/local.0, size: 64MB, took 0 secs
2015-11-23T17:51:24.481+0100 I NETWORK [initandlisten] waiting for connections on port 27017
^C
[mongo@oradb ~]$ mongod --config /home/mongo/db1/conf/mongod.conf --shutdown
2015-11-23T17:51:48.799+0100 I CONTROL log file "/home/mongo/db1/logs/mongod.log" exists; moved to "/home/mongo/db1/logs/mongod.log.2015-11-23T16-51-48".
killing process with pid: 5882
Os dejo la URL de la documentación oficial de instalación:
https://docs.mongodb.org/manual/tutorial/install-mongodb-on-linux/