Utilería MongoDB - Herramientas de Respaldo

🌟 Ver Proyecto en GitHub

Conjunto de herramientas para realizar respaldos y copias de seguridad de bases de datos MongoDB con soporte para interfaz gráfica y línea de comandos.

✨ Características

🚀 Características Generales

💾 Respaldos Completos

Realiza copias de seguridad completas de bases de datos MongoDB con procesamiento eficiente por lotes.

⚡ Procesamiento por Lotes

Procesa documentos en bloques de 1000-10000 para optimizar memoria y rendimiento.

🔒 Exclusión Automática

Excluye automáticamente bases de datos del sistema (admin, local, config).

🛠️ Manejo de Errores

Gestión robusta de errores con mensajes informativos y recuperación automática.

🔐 Autenticación Opcional

Soporte completo para autenticación con usuario y contraseña.

⚙️ Procesamiento en Segundo Plano

Ejecuta operaciones sin bloquear la interfaz de usuario (GUI).

💻 Versión CLI

🖥️ Versión GUI

📦 Instalación

⚙️ Opción 2: Instalación Manual con Entorno Conda
# Crear entorno conda aislado
conda create -n utilleria python=3.9 -y
conda activate utilleria

# Instalar dependencias básicas (para ambas versiones)
pip install pymongo==4.8.0

# Instalar dependencias para interfaz gráfica
pip install PySide6==6.7.2 python-dotenv==1.0.1

# Ejecutar interfaz gráfica
python 0-respaldar-mongodb-gui.py
🌐 Opción 3: Instalación Manual Global
# Dependencias básicas (para ambas versiones)
pip install pymongo==4.8.0

# Dependencias para interfaz gráfica
pip install PySide6==6.7.2 python-dotenv==1.0.1
Nota: La instalación automática con entorno conda es recomendada ya que mantiene las dependencias aisladas y evita conflictos con otras instalaciones de Python.

🚀 Uso

💻 Versión CLI

  1. Editar configuración en 0-respaldar-mongodb-cli.py:
    # Configuración de servidores
    ORIGIN_HOST = "tu-servidor-origen"
    ORIGIN_PORT = 27017
    DEST_HOST = "tu-servidor-destino"
    DEST_PORT = 27017

    # Credenciales (opcional)
    ORIGIN_USER = "usuario_origen" # None para deshabilitar
    ORIGIN_PASS = "contraseña_origen"
  2. Ejecutar respaldo:
    python 0-respaldar-mongodb-cli.py

🖥️ Versión GUI

  1. Ejecutar aplicación:
    Si usaste la instalación automática:
    # El script ya configuró todo y ejecutó la aplicación
    # Para futuras ejecuciones:
    conda activate utilleria
    python 0-respaldar-mongodb-gui.py
    Si hiciste instalación manual:
    # Activar entorno (si usas conda)
    conda activate utilleria

    # Ejecutar aplicación
    python 0-respaldar-mongodb-gui.py
  2. Configurar servidores:
    • Origen: Servidor MongoDB fuente (host, puerto, usuario, contraseña)
    • Destino: Servidor MongoDB objetivo (host, puerto, usuario, contraseña)
  3. Cargar bases de datos:
    • Clic en "🔍 Cargar Bases de Datos" para obtener lista del servidor origen
    • Usar "☑️ Seleccionar Todas" o "☐ Deseleccionar Todas" para gestión rápida
  4. Seleccionar bases de datos específicas:
    • Marcar/desmarcar las bases de datos que deseas copiar
    • Todas están seleccionadas por defecto al cargar
  5. Iniciar respaldo:
    • Clic en "▶️ Iniciar Respaldo"
    • Monitorear progreso en barra y logs en tiempo real
  6. Controlar el proceso:
    • ⏸️ Pausar/Reanudar: Pausar temporalmente el respaldo
    • ⏹️ Detener: Cancelar completamente la operación
    • 🗑️ Limpiar Todo: Limpiar logs y selecciones

⚙️ Configuración

Configuración por Defecto

Parámetro Valor por Defecto Descripción
Origen Host 10.0.0.12 Servidor MongoDB fuente
Origen Puerto 27017 Puerto del servidor origen
Destino Host 10.0.0.10 Servidor MongoDB destino
Destino Puerto 27017 Puerto del servidor destino
Usuario/Contraseña None Autenticación deshabilitada
Batch Size 1000 (CLI) / 10000 (GUI) Documentos por bloque
Timeout 5000ms Tiempo límite de conexión

Variables de Entorno

Puedes configurar las credenciales usando variables de entorno:

export MONGODB_ORIGIN_USER="tu_usuario"
export MONGODB_ORIGIN_PASS="tu_contraseña"
export MONGODB_DEST_USER="tu_usuario_destino"
export MONGODB_DEST_PASS="tu_contraseña_destino"

🔧 Requisitos del Sistema

Nota sobre Conda: Se recomienda instalar Anaconda o Miniconda para aprovechar la instalación automática que crea entornos aislados.

🔍 Solución de Problemas

Problemas Comunes

Error de Conexión

[!] Error al conectar con host:puerto - [Error details]
Soluciones:
  • Verificar que los servidores MongoDB estén ejecutándose
  • Comprobar configuración de red y firewalls
  • Validar puertos y direcciones IP
  • Confirmar credenciales de autenticación

Error de Permisos

[!] Error de permisos en la base de datos
Soluciones:
  • Verificar permisos de lectura en servidor origen
  • Confirmar permisos de escritura en servidor destino
  • Revisar configuración de autenticación y usuarios

Error de Memoria

[!] Memoria insuficiente para procesar documentos
Soluciones:
  • Reducir el tamaño del lote (batch_size) en el código
  • Procesar menos bases de datos por operación
  • Cerrar otras aplicaciones para liberar memoria

Error de Dependencias

ModuleNotFoundError: No module named 'pymongo'
Solución:
# Si usas conda
conda activate utilleria
pip install pymongo==4.8.0

# Si usas instalación global
pip install pymongo==4.8.0

Error de Conda

conda: comando no encontrado
Solución:

Error de Entorno Conda

Entorno 'utilleria' no existe o no se puede activar
Solución:
# Crear entorno manualmente
conda create -n utilleria python=3.9 -y
conda activate utilleria

# Instalar dependencias
pip install PySide6==6.7.2 pymongo==4.8.0 python-dotenv==1.0.1

Logs y Debug

🤝 Contribución

¡Las contribuciones son bienvenidas! Por favor:

  1. Haz un fork del proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abra un Pull Request

Desarrollo

Para desarrollo local:

# Clonar repositorio
git clone https://github.com/bgonpin/UTILLERIA_MONGODB.git
cd UTILLERIA_MONGODB

# Instalar dependencias de desarrollo
pip install -r requirements-dev.txt

# Ejecutar pruebas
python -m pytest tests/

📄 Licencia

Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE para más detalles.

🙏 Agradecimientos

📞 Soporte

Si encuentras algún problema o tienes sugerencias: