Cómo Instalar MongoDB en Ubuntu: Una Guía Completa

2024-08-22

Introducción

MongoDB es una popular base de datos NoSQL de código abierto que ofrece alto rendimiento, alta disponibilidad y fácil escalabilidad. Está diseñada para almacenar y gestionar grandes volúmenes de datos no estructurados o semiestructurados, lo que la convierte en una excelente opción para aplicaciones modernas que manejan estructuras de datos complejas y en constante cambio.

Breve descripción de MongoDB

MongoDB almacena datos en documentos flexibles similares a JSON llamados BSON (JSON Binario). Este enfoque orientado a documentos permite esquemas dinámicos, lo que significa que puedes almacenar documentos con diferentes estructuras en la misma colección. Las características clave de MongoDB incluyen:

  1. Almacenamiento orientado a documentos: Los datos se almacenan en documentos flexibles en lugar de filas y columnas.
  2. Soporte completo de índices: MongoDB admite la indexación en cualquier atributo.
  3. Replicación y alta disponibilidad: MongoDB proporciona replicación incorporada y conmutación por error automática.
  4. Fragmentación: MongoDB puede distribuir datos entre múltiples máquinas.
  5. Agregación: Ofrece un potente marco de agregación para el análisis de datos.

¿Por qué usar MongoDB en Ubuntu?

Ubuntu es una de las distribuciones de Linux más populares, conocida por su facilidad de uso, actualizaciones regulares y fuerte soporte de la comunidad. Hay varias razones por las que MongoDB y Ubuntu forman una gran combinación:

  1. Compatibilidad: MongoDB está bien soportado en Ubuntu, con paquetes oficiales disponibles.
  2. Rendimiento: La eficiente gestión de recursos de Ubuntu complementa las capacidades de alto rendimiento de MongoDB.
  3. Soporte a largo plazo: Tanto las versiones LTS (Long Term Support) de Ubuntu como MongoDB ofrecen soporte extendido, garantizando estabilidad para tus entornos de producción.
  4. Gran comunidad: Tanto MongoDB como Ubuntu tienen comunidades grandes y activas, lo que facilita encontrar soluciones a posibles problemas.
  5. Seguridad: Las sólidas características de seguridad de Ubuntu, combinadas con las opciones de seguridad de MongoDB, proporcionan una base sólida para proteger tus datos.

Requisitos previos

Antes de comenzar el proceso de instalación, es importante asegurarse de que tu sistema cumpla con los requisitos necesarios y que tengas los permisos apropiados. Repasemos los requisitos previos para instalar MongoDB en Ubuntu.

Versiones de Ubuntu compatibles

MongoDB es compatible con las siguientes versiones LTS (Long Term Support) de Ubuntu:

  • Ubuntu 20.04 LTS (Focal Fossa)
  • Ubuntu 18.04 LTS (Bionic Beaver)
  • Ubuntu 16.04 LTS (Xenial Xerus)

Se recomienda utilizar la última versión LTS de Ubuntu para un rendimiento y seguridad óptimos. Esta guía se centrará en Ubuntu 20.04 LTS, pero los pasos deberían ser similares para otras versiones compatibles.

Requisitos del sistema

MongoDB puede ejecutarse en sistemas con diversos recursos, pero para un rendimiento óptimo, considera las siguientes recomendaciones:

  1. CPU:

    • Mínimo: 2 núcleos
    • Recomendado: 4 núcleos o más para uso en producción
  2. RAM:

    • Mínimo: 4 GB
    • Recomendado: 8 GB o más para uso en producción
  3. Almacenamiento:

    • Mínimo: 10 GB de espacio libre
    • Recomendado: SSD para un mejor rendimiento
  4. Arquitectura:

    • Sistema de 64 bits (MongoDB no es compatible con sistemas de 32 bits)

Permisos requeridos

Para instalar MongoDB, necesitarás privilegios de sudo en tu sistema Ubuntu. Esto significa que debes iniciar sesión como usuario root o tener una cuenta que pueda usar sudo para ejecutar comandos con privilegios de root.

Para comprobar si tu usuario tiene privilegios de sudo, puedes ejecutar el siguiente comando en la terminal:

sudo -v

Si se te solicita una contraseña y el comando se ejecuta sin errores, tu usuario tiene privilegios de sudo.

Requisitos adicionales

  1. Conexión a Internet: Necesitarás una conexión a Internet activa para descargar MongoDB y sus dependencias.

  2. Acceso a la terminal: Debes sentirte cómodo usando la interfaz de línea de comandos (CLI) ya que utilizaremos la terminal para la mayor parte del proceso de instalación y configuración.

  3. Gestor de paquetes: Asegúrate de que el gestor de paquetes de tu sistema (apt) funcione correctamente.

  4. Configuración del cortafuegos: Si tienes un cortafuegos habilitado (como UFW), es posible que debas configurarlo para permitir el tráfico de MongoDB.

  5. SELinux: Si tienes SELinux habilitado, es posible que debas configurarlo para permitir que MongoDB funcione correctamente.

Actualización del sistema

Antes de instalar MongoDB, es crucial asegurarse de que tu sistema Ubuntu esté actualizado. Este paso es importante por varias razones:

  1. Seguridad: Las actualizaciones a menudo incluyen parches de seguridad importantes.
  2. Estabilidad: Las últimas actualizaciones pueden corregir errores y mejorar la estabilidad del sistema.
  3. Compatibilidad: Tener los paquetes más recientes puede prevenir posibles problemas de compatibilidad durante la instalación de MongoDB.

Importancia de las actualizaciones del sistema

Mantener tu sistema actualizado es un aspecto fundamental para mantener una instalación de Ubuntu saludable y segura. Garantiza que tengas los últimos parches de seguridad, correcciones de errores y mejoras de funcionalidades. Esto es particularmente importante cuando estás a punto de instalar nuevo software como MongoDB, ya que ayuda a prevenir conflictos y asegura que estés trabajando con las versiones más recientes y compatibles de todos los componentes del sistema.

Comandos para actualizar Ubuntu

Para actualizar tu sistema Ubuntu, sigue estos pasos:

  1. Abre tu terminal. Puedes hacerlo pulsando Ctrl + Alt + T o buscando "Terminal" en el panel de Ubuntu.

  2. Primero, actualiza la lista de paquetes para obtener información sobre las actualizaciones y nuevas instalaciones de paquetes disponibles. Ejecuta el siguiente comando:

    sudo apt update
    

    Este comando actualiza la lista de paquetes disponibles y sus versiones, pero no instala ni actualiza ningún paquete.

  3. Después de que se complete la actualización, actualiza los paquetes instalados a sus últimas versiones:

    sudo apt upgrade
    

    Este comando te mostrará una lista de paquetes que están a punto de ser actualizados. Revisa la lista y pulsa 'Y' y luego 'Enter' para confirmar y proceder con la actualización.

  4. (Opcional) Si quieres asegurarte de que todos los paquetes instalados se actualicen a sus últimas versiones, incluyendo aquellos que requieren la instalación de nuevos paquetes o la eliminación de paquetes existentes, puedes usar el siguiente comando:

    sudo apt full-upgrade
    

    Ten cuidado con este comando, ya que puede eliminar algunos paquetes si es necesario para resolver conflictos.

  5. Después de que se complete el proceso de actualización, es una buena idea reiniciar tu sistema para asegurarte de que todas las actualizaciones se apliquen correctamente:

    sudo reboot
    

Verificación de la actualización

Después de que tu sistema se reinicie, puedes verificar que la actualización se realizó correctamente comprobando la versión de Ubuntu:

lsb_release -a

Este comando mostrará información sobre tu distribución de Ubuntu, incluyendo el número de versión.

Al mantener tu sistema actualizado, estás estableciendo una base sólida para el proceso de instalación de MongoDB. Los sistemas actualizados tienen menos probabilidades de encontrar problemas de compatibilidad o vulnerabilidades de seguridad durante y después de la instalación.

Instalación de MongoDB

Ahora que tu sistema está actualizado, podemos proceder con la instalación de MongoDB. Vamos a recorrer el proceso paso a paso, incluyendo la adición del repositorio de MongoDB, la importación de la clave pública y la instalación de los paquetes de MongoDB.

Añadir el repositorio de MongoDB

MongoDB no está disponible en los repositorios predeterminados de Ubuntu. Por lo tanto, necesitamos añadir el repositorio oficial de MongoDB a nuestro sistema.

  1. Primero, vamos a añadir el repositorio de MongoDB a nuestra lista de fuentes. Crea un archivo de lista para MongoDB usando el siguiente comando:

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

    Nota: Este comando es para Ubuntu 20.04 (Focal Fossa) y MongoDB 5.0. Si estás usando una versión diferente de Ubuntu o quieres una versión diferente de MongoDB, necesitarás ajustar el comando en consecuencia.

Importar la clave pública

  1. Para garantizar la autenticidad de los paquetes que vamos a instalar, necesitamos importar la clave GPG pública de MongoDB:

    wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
    

    Si el comando fue exitoso, verás la salida "OK".

Instalar los paquetes de MongoDB

  1. Después de añadir el repositorio e importar la clave, actualiza la lista de paquetes:

    sudo apt update
    
  2. Ahora, instala MongoDB:

    sudo apt install -y mongodb-org
    

    Este comando instalará los siguientes paquetes:

    • mongodb-org (Un metapaquete que instala automáticamente los cuatro paquetes de componentes listados a continuación)
    • mongodb-org-server (El demonio mongod y scripts de configuración e inicio asociados)
    • mongodb-org-mongos (El demonio mongos)
    • mongodb-org-shell (El shell de mongo)
    • mongodb-org-tools (Contiene varias herramientas de MongoDB para importar y exportar datos, estadísticas y otras utilidades)

Verificar la instalación

  1. Una vez que la instalación esté completa, puedes verificar la versión de MongoDB ejecutando:

    mongod --version
    

    Esto debería mostrar la versión de MongoDB que acabas de instalar.

  2. MongoDB debería iniciarse automáticamente después de la instalación. Puedes verificar su estado con:

    sudo systemctl status mongod
    

    Si MongoDB está en ejecución, deberías ver una salida indicando que el servicio está activo (en ejecución).

  3. Si MongoDB no está en ejecución, puedes iniciarlo con:

    sudo systemctl start mongod
    
  4. Para asegurarte de que MongoDB se inicie automáticamente al reiniciar el sistema, ejecuta:

    sudo systemctl enable mongod
    

Configuración de MongoDB

Después de instalar MongoDB con éxito, el siguiente paso es configurarlo según tus necesidades. En esta sección, cubriremos la comprensión del archivo de configuración, los ajustes de configuración básicos y cómo asegurar MongoDB habilitando la autenticación.

Entender el archivo de configuración

El archivo de configuración principal de MongoDB es mongod.conf. En Ubuntu, este archivo se encuentra típicamente en /etc/mongod.conf. Este archivo utiliza el formato YAML para los ajustes de configuración.

Para ver el contenido de este archivo, puedes usar el siguiente comando:

sudo nano /etc/mongod.conf

Ajustes de configuración básicos

Repasemos algunos de los ajustes de configuración clave:

  1. bindIp: Por defecto, está configurado a 127.0.0.1, lo que significa que MongoDB solo aceptará conexiones desde el localhost. Si necesitas aceptar conexiones desde hosts remotos, tendrás que cambiar esto.

  2. port: El puerto predeterminado es 27017. Puedes cambiarlo si es necesario, pero recuerda actualizar tus reglas de cortafuegos en consecuencia.

  3. dbPath: Esto especifica dónde MongoDB almacena sus archivos de datos. El valor predeterminado es /var/lib/mongodb.

  4. logPath: Esto especifica dónde MongoDB escribe sus registros. El valor predeterminado es /var/log/mongodb/mongod.log.

Aquí tienes un ejemplo de cómo podrían verse estos en tu archivo de configuración:

# interfaces de red
net:
  port: 27017
  bindIp: 127.0.0.1

# dónde escribir los datos de registro
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# dónde y cómo almacenar datos
storage:
  dbPath: /var/lib/mongodb

Asegurar MongoDB (Habilitar autenticación)

Por defecto, MongoDB no requiere autenticación. Es crucial habilitarla para entornos de producción.

  1. Primero, inicia el shell de MongoDB:

    mongo
    
  2. Cambia a la base de datos admin:

    use admin
    
  3. Crea un usuario administrador:

    db.createUser(
      {
        user: "adminUser",
        pwd: "contraseñaSegura",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    

    Reemplaza "adminUser" y "contraseñaSegura" con tu nombre de usuario y contraseña elegidos.

  4. Sal del shell de MongoDB:

    exit
    
  5. Ahora, edita el archivo de configuración de MongoDB:

    sudo nano /etc/mongod.conf
    
  6. Añade o modifica la sección de seguridad para habilitar la autenticación:

    security:
      authorization: enabled
    
  7. Guarda el archivo y sal del editor.

  8. Reinicia MongoDB para que los cambios surtan efecto:

    sudo systemctl restart mongod
    

Ahora, MongoDB requerirá autenticación para todas las conexiones. Para conectarte a MongoDB con autenticación, usarás un comando como este:

mongo -u adminUser -p --authenticationDatabase admin

Se te pedirá que introduzcas tu contraseña.

Recuerda reemplazar la información sensible como nombres de usuario y contraseñas con valores seguros en tu configuración real.

Iniciar y detener MongoDB

Gestionar el servicio de MongoDB es una parte crucial de la administración de bases de datos. En esta sección, cubriremos cómo iniciar, detener, reiniciar y comprobar el estado del servicio de MongoDB en Ubuntu.

Iniciar el servicio de MongoDB

Si MongoDB no está ya en ejecución, puedes iniciarlo usando el siguiente comando:

sudo systemctl start mongod

Este comando le dice a systemd (el gestor de sistema y servicios de Ubuntu) que inicie el servicio de MongoDB.

Detener el servicio de MongoDB

Si necesitas detener MongoDB, tal vez para mantenimiento o cambios de configuración, usa este comando:

sudo systemctl stop mongod

Esto detendrá el servicio de MongoDB de manera ordenada.

Reiniciar el servicio de MongoDB

Si has realizado cambios en el archivo de configuración de MongoDB o simplemente quieres reiniciar el servicio, puedes usar:

sudo systemctl restart mongod

Este comando efectivamente detiene y luego inicia el servicio de nuevo.

Comprobar el estado del servicio

Para comprobar el estado actual del servicio de MongoDB, usa:

sudo systemctl status mongod

Esto mostrará información sobre el servicio de MongoDB, incluyendo si está activo (en ejecución) o inactivo (detenido), cuánto tiempo ha estado en ejecución y entradas de registro recientes.

La salida se verá algo así:

● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-05-22 15:30:45 UTC; 2h 35min ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 1234 (mongod)
     Memory: 178.0M
     CGroup: /system.slice/mongod.service
             └─1234 /usr/bin/mongod --config /etc/mongod.conf

Habilitar MongoDB para que se inicie al arrancar

Para asegurarte de que MongoDB se inicie automáticamente cuando tu sistema arranque, puedes habilitar el servicio:

sudo systemctl enable mongod

Por el contrario, si quieres deshabilitar que MongoDB se inicie automáticamente al arrancar:

sudo systemctl disable mongod

Comprobar los registros de MongoDB

Si necesitas solucionar problemas o simplemente quieres monitorizar la actividad de MongoDB, puedes ver su archivo de registro:

sudo tail -f /var/log/mongodb/mongod.log

Este comando te mostrará las últimas líneas del archivo de registro y se actualizará en tiempo real a medida que se añadan nuevas entradas de registro. Usa Ctrl+C para salir de la vista de registro.

Recuerda, cada vez que hagas cambios en el archivo de configuración de MongoDB (/etc/mongod.conf), necesitarás reiniciar el servicio para que esos cambios surtan efecto.

Conexión a MongoDB

Ahora que MongoDB está instalado, configurado y en ejecución, aprendamos cómo conectarnos a él y realizar algunas operaciones básicas. Usaremos el shell de MongoDB, que es una interfaz interactiva de JavaScript para MongoDB.

Usar el shell de MongoDB

  1. Para iniciar el shell de MongoDB, abre una terminal y escribe:

    mongo
    

    Si has habilitado la autenticación, necesitarás conectarte con un nombre de usuario y contraseña:

    mongo -u adminUser -p --authenticationDatabase admin
    

    Se te pedirá que introduzcas tu contraseña.

  2. Una vez conectado, verás el prompt del shell de MongoDB:

    MongoDB shell version v5.0.x
    connecting to: mongodb://127.0.0.1:27017
    MongoDB server version: 5.0.x
    >
    

Crear una base de datos y colección

  1. Para crear una nueva base de datos (o cambiar a una existente), usa el comando use:

    use miNuevaBaseDeDatos
    

    MongoDB creará la base de datos si no existe y cambiará a ella.

  2. Para crear una nueva colección, simplemente puedes insertar un documento en ella:

    db.miColeccion.insertOne({ nombre: "Juan Pérez", edad: 30, ciudad: "Madrid" })
    

    Esto crea una colección llamada miColeccion e inserta un documento en ella.

Operaciones CRUD básicas

Realicemos algunas operaciones básicas de Crear, Leer, Actualizar y Eliminar (CRUD):

  1. Crear (Insertar) más documentos:

    db.miColeccion.insertMany([
      { nombre: "María García", edad: 25, ciudad: "Barcelona" },
      { nombre: "Carlos Rodríguez", edad: 35, ciudad: "Sevilla" }
    ])
    
  2. Leer (Consultar) documentos:

    // Encontrar todos los documentos en la colección
    db.miColeccion.find()
    
    // Encontrar documentos que coincidan con un criterio específico
    db.miColeccion.find({ ciudad: "Madrid" })
    
    // Encontrar un documento
    db.miColeccion.findOne({ nombre: "Juan Pérez" })
    
  3. Actualizar documentos:

    // Actualizar un documento
    db.miColeccion.updateOne(
      { nombre: "Juan Pérez" },
      { $set: { edad: 31 } }
    )
    
    // Actualizar múltiples documentos
    db.miColeccion.updateMany(
      { ciudad: "Madrid" },
      { $set: { pais: "España" } }
    )
    
  4. Eliminar documentos:

    // Eliminar un documento
    db.miColeccion.deleteOne({ nombre: "María García" })
    
    // Eliminar múltiples documentos
    db.miColeccion.deleteMany({ edad: { $lt: 30 } })
    
  5. Para salir del shell de MongoDB, escribe:

    exit
    

Comandos útiles adicionales

Aquí tienes algunos comandos útiles más:

  • Mostrar todas las bases de datos: show dbs
  • Mostrar todas las colecciones en la base de datos actual: show collections
  • Mostrar ayuda: help

Recuerda, estas son solo operaciones básicas. MongoDB ofrece muchas más características avanzadas como indexación, agregación y búsqueda de texto. A medida que te sientas más cómodo con estos conceptos básicos, puedes explorar operaciones y consultas más complejas.

Habilitar acceso remoto (Opcional)

Por defecto, MongoDB está configurado para permitir conexiones solo desde el localhost. Sin embargo, en algunos escenarios, es posible que necesites acceder a tu instancia de MongoDB desde una máquina remota. Esta sección te guiará a través del proceso de habilitar el acceso remoto a tu servidor MongoDB.

Modificar la configuración para el acceso remoto

  1. Primero, abre el archivo de configuración de MongoDB:

    sudo nano /etc/mongod.conf
    
  2. Busca la sección net en el archivo de configuración. Debería verse algo así:

    net:
      port: 27017
      bindIp: 127.0.0.1
    
  3. Cambia el valor de bindIp para permitir conexiones desde todas las direcciones IP:

    net:
      port: 27017
      bindIp: 0.0.0.0
    

    Esto le dice a MongoDB que escuche conexiones en todas las direcciones IP disponibles.

  4. Guarda el archivo y sal del editor.

  5. Reinicia MongoDB para que los cambios surtan efecto:

    sudo systemctl restart mongod
    

Configurar los ajustes del cortafuegos

Si tienes un cortafuegos habilitado (como UFW en Ubuntu), necesitas abrir el puerto de MongoDB (por defecto es 27017) para permitir conexiones entrantes.

  1. Para abrir el puerto usando UFW:

    sudo ufw allow 27017
    
  2. Puedes comprobar el estado de UFW con:

    sudo ufw status
    

Consideraciones de seguridad

Habilitar el acceso remoto a tu servidor MongoDB introduce riesgos potenciales de seguridad. Aquí tienes algunas medidas de seguridad importantes a considerar:

  1. Usar autenticación fuerte: Asegúrate de haber habilitado la autenticación y estar usando contraseñas fuertes y únicas para todos los usuarios de la base de datos.

  2. Habilitar SSL/TLS: Configura MongoDB para usar SSL/TLS para todas las conexiones entrantes para cifrar los datos en tránsito.

  3. Usar una VPN o túnel SSH: En lugar de exponer MongoDB directamente a Internet, considera usar una VPN o túnel SSH para el acceso remoto.

  4. Implementar lista blanca de IP: Si es posible, configura tu cortafuegos para permitir conexiones solo desde direcciones IP o rangos específicos.

  5. Mantener MongoDB actualizado: Actualiza regularmente MongoDB a la última versión para asegurarte de tener los parches de seguridad más recientes.

Conectar desde un cliente remoto

Una vez que hayas habilitado el acceso remoto, puedes conectarte a tu instancia de MongoDB desde una máquina remota usando una cadena de conexión como esta:

mongodb://usuario:contraseña@direccion_ip_del_servidor:27017/nombre_de_la_base_de_datos

Reemplaza usuario, contraseña, direccion_ip_del_servidor, y nombre_de_la_base_de_datos con tus valores reales.

Verificar la conexión remota

Para verificar que las conexiones remotas están funcionando:

  1. Desde otra máquina, puedes usar el shell de MongoDB para conectarte:

    mongo --host direccion_ip_del_servidor -u usuario -p --authenticationDatabase admin
    

    Reemplaza direccion_ip_del_servidor y usuario con tus valores reales. Se te pedirá que introduzcas tu contraseña.

  2. Si la conexión es exitosa, verás el prompt del shell de MongoDB.

Recuerda, habilitar el acceso remoto debe hacerse con precaución y solo cuando sea necesario. Siempre prioriza la seguridad al exponer tu base de datos a conexiones externas.

Copia de seguridad y restauración de MongoDB

Hacer copias de seguridad de tus datos es un aspecto crucial de la gestión de bases de datos. Ayuda a proteger contra la pérdida de datos debido a fallos de hardware, errores humanos u otras circunstancias imprevistas. En esta sección, cubriremos cómo crear copias de seguridad de tus bases de datos MongoDB y cómo restaurar a partir de estas copias de seguridad.

Crear copias de seguridad de bases de datos

MongoDB proporciona dos herramientas principales para crear copias de seguridad: mongodump y mongodump.

Usar mongodump

mongodump es una utilidad que crea una exportación binaria del contenido de una base de datos.

  1. Para hacer una copia de seguridad de todas las bases de datos:

    mongodump --out /ruta/al/directorio/de/copia/de/seguridad
    
  2. Para hacer una copia de seguridad de una base de datos específica:

    mongodump --db nombre_de_base_de_datos --out /ruta/al/directorio/de/copia/de/seguridad
    
  3. Si tienes autenticación habilitada, usa:

    mongodump --username tu_usuario --password tu_contraseña --authenticationDatabase admin --out /ruta/al/directorio/de/copia/de/seguridad
    

Usar mongodump

mongodump es una alternativa que crea una exportación JSON de tus datos.

  1. Para hacer una copia de seguridad de todas las bases de datos:

    mongodump --out /ruta/al/directorio/de/copia/de/seguridad
    
  2. Para hacer una copia de seguridad de una base de datos específica:

    mongodump --db nombre_de_base_de_datos --out /ruta/al/directorio/de/copia/de/seguridad
    

Restaurar desde copias de seguridad

Para restaurar tus datos, puedes usar la utilidad mongorestore.

Restaurar desde mongodump

  1. Para restaurar todas las bases de datos:

    mongorestore /ruta/al/directorio/de/copia/de/seguridad
    
  2. Para restaurar una base de datos específica:

    mongorestore --db nombre_de_base_de_datos /ruta/al/directorio/de/copia/de/seguridad/nombre_de_base_de_datos
    
  3. Si tienes autenticación habilitada:

    mongorestore --username tu_usuario --password tu_contraseña --authenticationDatabase admin /ruta/al/directorio/de/copia/de/seguridad
    

Restaurar desde mongodump

El proceso es similar a mongorestore:

  1. Para restaurar todas las bases de datos:

    mongorestore /ruta/al/directorio/de/copia/de/seguridad
    
  2. Para restaurar una base de datos específica:

    mongorestore --db nombre_de_base_de_datos /ruta/al/directorio/de/copia/de/seguridad/nombre_de_base_de_datos
    

Mejores prácticas para copias de seguridad de MongoDB

  1. Copias de seguridad regulares: Programa copias de seguridad regulares, con una frecuencia que dependa de cuán a menudo cambian tus datos.

  2. Almacenamiento fuera del sitio: Almacena las copias de seguridad en una ubicación diferente a tu base de datos principal para proteger contra desastres físicos.

  3. Verificación de copias de seguridad: Prueba regularmente tus copias de seguridad realizando restauraciones de prueba para asegurarte de que están funcionando correctamente.

  4. Recuperación en un punto en el tiempo: Para entornos de producción, considera usar el oplog de MongoDB para recuperación en un punto en el tiempo.

  5. Compresión: Usa compresión para reducir el tamaño de la copia de seguridad, especialmente para bases de datos grandes.

    mongodump --gzip --out /ruta/al/directorio/de/copia/de/seguridad
    
  6. Automatización: Usa scripts o herramientas para automatizar tu proceso de copia de seguridad.

Monitorizar el estado de la copia de seguridad

Puedes monitorizar el progreso de tus operaciones de copia de seguridad comprobando el archivo de registro de MongoDB:

tail -f /var/log/mongodb/mongod.log

Recuerda, tener una estrategia sólida de copia de seguridad es crucial para cualquier base de datos en producción. Prueba regularmente tus procedimientos de copia de seguridad y restauración para asegurarte de que puedes recuperar tus datos cuando sea necesario.

Actualización de MongoDB

Mantener tu instalación de MongoDB actualizada es crucial para la seguridad, el rendimiento y el acceso a nuevas características. Esta sección te guiará a través del proceso de actualización de MongoDB en tu sistema Ubuntu.

Comprobar la versión actual

Antes de actualizar, es importante saber qué versión de MongoDB estás ejecutando actualmente. Puedes comprobarlo ejecutando:

mongod --version

Pasos para actualizar MongoDB

  1. Actualizar la lista de paquetes: Primero, actualiza la lista de paquetes de tu sistema para asegurarte de que tienes la información más reciente sobre los paquetes disponibles:

    sudo apt update
    
  2. Hacer una copia de seguridad de tus datos: Antes de realizar cualquier actualización, es crucial hacer una copia de seguridad de tus datos. Consulta la sección anterior sobre copias de seguridad para obtener instrucciones detalladas.

  3. Detener el servicio de MongoDB:

    sudo systemctl stop mongod
    
  4. Actualizar los paquetes de MongoDB:

    sudo apt upgrade mongodb-org
    

    Este comando actualizará MongoDB a la última versión en el repositorio que has añadido.

  5. Iniciar el servicio de MongoDB:

    sudo systemctl start mongod
    
  6. Verificar la nueva versión: Después de la actualización, verifica que la nueva versión está instalada correctamente:

    mongod --version
    

Actualizar a una versión específica

Si quieres actualizar a una versión específica de MongoDB en lugar de la última versión, puedes especificar el número de versión:

sudo apt install mongodb-org=X.Y.Z mongodb-org-server=X.Y.Z mongodb-org-shell=X.Y.Z mongodb-org-mongos=X.Y.Z mongodb-org-tools=X.Y.Z

Reemplaza X.Y.Z con el número de versión que quieres instalar.

Manejar actualizaciones de versiones mayores

Cuando se actualiza entre versiones mayores (por ejemplo, de 4.x a 5.x), puede haber pasos o consideraciones adicionales:

  1. Comprobar compatibilidad: Asegúrate de que tu versión actual de MongoDB puede ser actualizada directamente a la versión objetivo. Algunas actualizaciones pueden requerir pasos intermedios.

  2. Revisar notas de la versión: Siempre lee las notas de la versión para la nueva versión para entender cualquier cambio importante o nuevas características.

  3. Actualizar controladores y clientes: Asegúrate de que todas las aplicaciones y controladores que se conectan a MongoDB son compatibles con la nueva versión.

  4. Probar en un entorno no productivo: Siempre prueba el proceso de actualización en un entorno de pruebas antes de aplicarlo a producción.

Pasos posteriores a la actualización

Después de actualizar:

  1. Comprobar los registros en busca de errores:

    sudo tail -f /var/log/mongodb/mongod.log
    
  2. Ejecutar comprobaciones de integridad de la base de datos: Conéctate al shell de MongoDB y ejecuta:

    db.runCommand( { dbCheck: 1 } )
    

    para cada una de tus bases de datos.

  3. Actualizar MongoDB Compass u otras herramientas GUI si las estás usando.

  4. Revisar y actualizar tu estrategia de copia de seguridad si es necesario, ya que las versiones más nuevas podrían ofrecer métodos de copia de seguridad mejorados.

Degradar MongoDB

Si encuentras problemas después de una actualización, es posible que necesites degradar. La degradación debe hacerse con precaución:

  1. Detener el servicio de MongoDB.
  2. Eliminar los nuevos paquetes.
  3. Instalar los paquetes de la versión anterior.
  4. Restaurar desde una copia de seguridad realizada antes de la actualización.

Recuerda, la degradación puede no ser siempre sencilla, especialmente entre versiones mayores, debido a posibles cambios en el formato de los datos.

Solución de problemas comunes

Incluso con una configuración y mantenimiento cuidadosos, es posible que encuentres problemas con tu instalación de MongoDB. Esta sección cubre algunos problemas comunes y sus soluciones.

Problemas de permisos

  1. Problema: Errores de "Permiso denegado" al intentar acceder a MongoDB.

    Solución:

    • Asegúrate de que el directorio de datos de MongoDB tenga la propiedad correcta:
      sudo chown -R mongodb:mongodb /var/lib/mongodb
      
    • Comprueba los permisos del archivo de registro de MongoDB:
      sudo chown mongodb:mongodb /var/log/mongodb/mongod.log
      
  2. Problema: No puedes acceder a MongoDB con tu usuario de Ubuntu.

    Solución:

    • Añade tu usuario al grupo de MongoDB:
      sudo usermod -aG mongodb $USER
      
    • Cierra la sesión y vuelve a iniciarla para que los cambios surtan efecto.

Problemas de conexión

  1. Problema: Error de "Conexión rechazada".

    Solución:

    • Comprueba si MongoDB está en ejecución:
      sudo systemctl status mongod
      
    • Si no está en ejecución, inícialo:
      sudo systemctl start mongod
      
    • Asegúrate de que MongoDB esté escuchando en la dirección correcta en mongod.conf:
      net:
        port: 27017
        bindIp: 127.0.0.1
      
  2. Problema: No puedes conectarte remotamente.

    Solución:

    • Comprueba si MongoDB está vinculado a todas las interfaces (0.0.0.0) en mongod.conf.
    • Asegúrate de que tu cortafuegos permite conexiones en el puerto 27017.
    • Verifica que la autenticación esté configurada correctamente si la estás usando.

Problemas de rendimiento

  1. Problema: Consultas lentas o rendimiento general deficiente.

    Solución:

    • Usa el método explain() para analizar el rendimiento de las consultas:
      db.coleccion.find(<consulta>).explain("executionStats")
      
    • Asegúrate de tener una indexación adecuada:
      db.coleccion.createIndex({ campo: 1 })
      
    • Comprueba los recursos del sistema (CPU, RAM, E/S de disco) en busca de cuellos de botella.
  2. Problema: Alto uso de memoria.

    Solución:

    • Ajusta el tamaño de la caché WiredTiger en mongod.conf:
      storage:
        wiredTiger:
          engineConfig:
            cacheSizeGB: 1
      
    • Optimiza tus consultas para reducir el uso de memoria.

Corrupción de la base de datos

  1. Problema: Los archivos de la base de datos están corruptos.

    Solución:

    • Detén MongoDB:
      sudo systemctl stop mongod
      
    • Repara la base de datos:
      mongod --repair --dbpath /var/lib/mongodb
      
    • Si la reparación falla, restaura desde una copia de seguridad reciente.

Análisis de archivos de registro

Los registros de MongoDB pueden proporcionar información valiosa para la solución de problemas:

  1. Ver las últimas 100 líneas del archivo de registro:

    sudo tail -n 100 /var/log/mongodb/mongod.log
    
  2. Buscar mensajes de error:

    sudo grep "ERROR" /var/log/mongodb/mongod.log
    

Mensajes de error comunes

  1. "Operación no permitida": A menudo relacionado con SELinux o AppArmor. Comprueba su estado y configúralos para permitir operaciones de MongoDB.

  2. "No queda espacio en el dispositivo": Comprueba tu espacio en disco y libera espacio si es necesario.

  3. "demasiados archivos abiertos": Aumenta el límite de archivos abiertos del sistema:

    sudo ulimit -n 64000
    

Buscar ayuda adicional

Si no puedes resolver un problema:

  1. Consulta la documentación oficial de MongoDB.
  2. Busca en los Foros de la Comunidad de MongoDB.
  3. Revisa el JIRA de MongoDB para problemas conocidos.
  4. Considera contactar con el soporte de MongoDB si tienes una licencia comercial.

Mejores prácticas y consideraciones de seguridad

Implementar las mejores prácticas y priorizar la seguridad son cruciales para mantener una instalación robusta y segura de MongoDB. Esta sección cubrirá recomendaciones clave para optimizar tu despliegue de MongoDB.

Recomendaciones de seguridad

  1. Habilitar autenticación:

    • Siempre usa autenticación en entornos de producción.
    • Crea cuentas de usuario individuales con roles y privilegios específicos.
    use admin
    db.createUser(
      {
        user: "usuarioAdmin",
        pwd: "contraseñaSegura",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    
  2. Habilitar control de acceso:

    • Establece authorization: enabled en tu archivo mongod.conf.
  3. Usar TLS/SSL para cifrado:

    • Configura MongoDB para usar TLS/SSL para todas las conexiones de red.
    • En mongod.conf:
      net:
        ssl:
          mode: requireSSL
          PEMKeyFile: /ruta/a/mongodb.pem
      
  4. Implementar seguridad de red:

    • Usa cortafuegos para restringir el acceso a los puertos de MongoDB.
    • Considera usar una VPN para acceso remoto.
  5. Auditorías de seguridad regulares:

    • Revisa periódicamente las cuentas de usuario y sus privilegios.
    • Usa la lista de verificación de seguridad incorporada de MongoDB:
      db.adminCommand( { getCmdLineOpts: 1 } )
      
  6. Mantener MongoDB actualizado:

    • Actualiza regularmente a la última versión estable para beneficiarte de los parches de seguridad.

Consejos de optimización de rendimiento

  1. Indexación adecuada:

    • Crea índices para soportar tus consultas:
      db.coleccion.createIndex({ campo: 1 })
      
    • Usa el método explain() para analizar el rendimiento de las consultas.
  2. Usar Write Concern apropiado:

    • Equilibra entre seguridad de datos y rendimiento:
      db.coleccion.insertOne({ ... }, { writeConcern: { w: 1, j: true } })
      
  3. Optimizar el diseño del esquema:

    • Diseña tu esquema para soportar tus consultas más frecuentes.
    • Considera embeber datos relacionados para información de acceso frecuente.
  4. Monitorear y ajustar recursos del sistema:

    • Asegúrate de tener RAM adecuada para tu conjunto de trabajo.
    • Usa almacenamiento SSD para mejorar el rendimiento de E/S.
  5. Usar agregación para consultas complejas:

    • Aprovecha el pipeline de agregación para un procesamiento de datos eficiente:
      db.coleccion.aggregate([
        { $match: { ... } },
        { $group: { ... } },
        { $sort: { ... } }
      ])
      

Copia de seguridad y recuperación ante desastres

  1. Copias de seguridad regulares:

    • Implementa copias de seguridad automatizadas y regulares.
    • Prueba tu proceso de restauración periódicamente.
  2. Implementar replicación:

    • Usa conjuntos de réplicas para alta disponibilidad y redundancia de datos.
  3. Plan de recuperación ante desastres:

    • Desarrolla y documenta un plan de recuperación ante desastres.
    • Practica regularmente escenarios de recuperación.

Monitoreo y registro

  1. Configurar monitoreo:

    • Usa MongoDB Cloud Manager u otras herramientas de monitoreo.
    • Monitorea métricas clave como operaciones/segundo, conexiones y uso de memoria.
  2. Configurar registro adecuado:

    • Habilita el registro para consultas lentas:
      operationProfiling:
        slowOpThresholdMs: 100
        mode: slowOp
      
  3. Rotación de registros:

    • Implementa rotación de registros para gestionar los tamaños de los archivos de registro.

Mejores prácticas de desarrollo

  1. Usar agrupación de conexiones:

    • Implementa agrupación de conexiones en tu aplicación para gestionar eficientemente las conexiones a la base de datos.
  2. Implementar manejo de errores adecuado:

    • Maneja los errores de la base de datos con elegancia en el código de tu aplicación.
  3. Usar tipos de datos apropiados:

    • Elige los tipos BSON correctos para tus datos para optimizar el almacenamiento y el rendimiento de las consultas.
  4. Validar entrada:

    • Implementa validación de entrada para prevenir ataques de inyección y corrupción de datos.

Mantenimiento regular

  1. Compactar bases de datos:

    • Compacta regularmente las bases de datos para recuperar espacio en disco:
      db.runCommand( { compact: 'nombre_coleccion' } )
      
  2. Comprobar la integridad de la base de datos:

    • Ejecuta periódicamente comprobaciones de integridad:
      db.runCommand( { dbCheck: 1 } )
      

Instalar MongoDB en Ubuntu

Preguntas frecuentes (FAQ)

Aquí tienes algunas preguntas frecuentes sobre la instalación y uso de MongoDB en Ubuntu:

P: ¿Cómo puedo saber qué versión de MongoDB estoy ejecutando?

R: Puedes usar el siguiente comando en la terminal:

mongod --version

O, si ya estás en el shell de MongoDB:

db.version()

P: ¿Puedo tener múltiples versiones de MongoDB instaladas en el mismo sistema Ubuntu?

R: Aunque es posible, generalmente no se recomienda ya que puede llevar a conflictos. Si necesitas ejecutar múltiples versiones, considera usar contenedores Docker para el aislamiento.

P: ¿Cómo cambio la contraseña de usuario de MongoDB?

R: Puedes cambiar la contraseña usando el siguiente comando en el shell de MongoDB:

db.changeUserPassword("nombreUsuario", "nuevaContraseña")

P: ¿Cómo puedo habilitar el acceso remoto a mi servidor MongoDB?

R: Necesitas modificar el bindIp en tu archivo mongod.conf a 0.0.0.0, asegurarte de que tu cortafuegos permita conexiones en el puerto 27017, y reiniciar MongoDB. Sin embargo, asegúrate de implementar medidas de seguridad adecuadas antes de hacer esto.

P: ¿Cuál es la diferencia entre las ediciones Community y Enterprise de MongoDB?

R: MongoDB Community es gratuita y de código abierto, mientras que Enterprise ofrece características adicionales como autenticación LDAP, auditoría y motores de almacenamiento cifrados. Para la mayoría de los usuarios, la edición Community es suficiente.

P: ¿Cómo hago una copia de seguridad de mi base de datos MongoDB?

R: Puedes usar la utilidad mongodump para crear una exportación binaria de tu base de datos:

mongodump --out /ruta/al/directorio/de/copia/de/seguridad

P: ¿Cómo puedo mejorar el rendimiento de MongoDB?

R: Algunas formas de mejorar el rendimiento incluyen:

  • Indexación adecuada
  • Usar Write Concerns apropiados
  • Optimizar el diseño del esquema
  • Asegurar recursos de sistema adecuados (especialmente RAM)
  • Mantenimiento regular (como ejecutar operaciones de compactación y reparación)

P: ¿Qué debo hacer si MongoDB no arranca?

R: Comprueba el archivo de registro de MongoDB (normalmente en /var/log/mongodb/mongod.log) en busca de mensajes de error. Los problemas comunes incluyen problemas de permisos, conflictos de puertos o archivos de datos corruptos.

P: ¿Cómo me conecto a MongoDB desde un lenguaje de programación?

R: La mayoría de los lenguajes de programación tienen controladores oficiales o soportados por la comunidad para MongoDB. Por ejemplo, en Python, usarías pymongo:

from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')

P: ¿Es seguro usar MongoDB sin autenticación en desarrollo?

R: Aunque es posible, generalmente se recomienda usar siempre autenticación, incluso en entornos de desarrollo. Esto ayuda a asegurar que tus prácticas de desarrollo se alineen con los requisitos de seguridad de producción.

P: ¿Con qué frecuencia debo hacer copias de seguridad de mis bases de datos MongoDB?

R: La frecuencia de las copias de seguridad depende de tu caso de uso específico y de con qué frecuencia cambian tus datos. Para aplicaciones críticas, considera copias de seguridad continuas o al menos diarias.

P: ¿Puedo cambiar el puerto predeterminado (27017) que usa MongoDB?

R: Sí, puedes cambiar el puerto predeterminado en el archivo mongod.conf:

net:
  port: 27018

Recuerda reiniciar MongoDB después de hacer este cambio.