Skip to content

lanek-cl/database-backups

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Database Backup Manager

Un sistema de gestión de backups para bases de datos Docker (PostgreSQL, MySQL/MariaDB, MongoDB) escrito en Python.

Características

  • Agregar bases de datos: Configura conexiones a bases de datos en contenedores Docker.
  • Remover bases de datos: Elimina configuraciones de bases de datos.
  • Listar bases de datos: Muestra todas las bases de datos configuradas con detalles.
  • Configurar sistema: Establece directorio base y horarios de backup.
  • Realizar backups: Ejecuta dumps automáticos de las bases de datos configuradas.
  • Crear crontab: Automatiza backups con cron basado en la configuración.
  • Gestionar crontab: Muestra y elimina líneas de crontab relacionadas con backups.
  • Rotación automática: Mantiene solo las últimas copias de backups y logs para ahorrar espacio.
  • Logging: Registra todas las operaciones en archivos de log con timestamps.
  • Interfaz interactiva: Menús con navegación por cursor para una experiencia de usuario amigable.
  • Integración con S3: Soporte para subir/descargar y sincronizar backups en S3 mediante la clase s3.S3. Funcionalidades principales: subida de archivos y bytes, descarga, listado de objetos, descarga de carpetas, eliminación y sincronización remota (método sync_file para subir/eliminar).

Requisitos

  • Python 3.8+
  • Docker (para ejecutar contenedores de bases de datos)
  • Bibliotecas Python: inquirer, pymongo, mysql-connector-python, psycopg2-binary

Instalación

  1. Clona o descarga el proyecto.
  2. Crea un entorno virtual:
    python -m venv .venv
    source .venv/bin/activate  # En Linux/Mac
  3. Instala las dependencias:
    pip install inquirer pymongo mysql-connector-python psycopg2-binary
  4. Asegúrate de que Docker esté corriendo y tengas contenedores de bases de datos activos.

Uso

Ejecuta el script principal:

python main.py

Modo automático

Para ejecutar backups sin menú (útil para cron):

python main.py --backup

Menú principal

  • Listar bases de datos: Muestra todas las DBs configuradas con detalles.
  • Agregar base de datos: Configura una nueva conexión a una DB.
  • Remover base de datos: Elimina una configuración existente.
  • Configurar sistema: Establece directorio y horarios de backup.
  • Hacer backups: Ejecuta backups de todas las DBs configuradas.
  • Crear crontab: Agrega tarea automática de backup al cron.
  • Gestionar crontab: Muestra y elimina crontabs de backup.
  • Salir: Cierra el programa.

Configurar sistema

Antes de usar backups, configura el directorio base (donde se crearán dumps/ y logs/) y el horario en formato cron.

Crear crontab

Crea automáticamente una tarea en cron para ejecutar backups según el horario configurado. Usa python main.py --backup para modo no interactivo.

Gestionar crontab

Muestra las líneas de crontab relacionadas con backups y permite eliminarlas.

Hacer backups

  • Los dumps se guardan en /home/deployer/backups/dumps/{db_name}/.
  • Nombres de archivos: {db_name}_{dd-mm-yyyy-hh-mm}.sql (o .archive para MongoDB).
  • Se mantienen solo 3 copias por DB; las más antiguas se eliminan automáticamente.
  • Logs en /home/deployer/backups/logs/backup_{dd-mm-yyyy-hh-mm}.log (máximo 30 logs).

Integración con S3

  • Descripción: El proyecto añade soporte para almacenar y sincronizar backups en Amazon S3 utilizando la clase s3.S3 definida en s3.py.
  • Funcionalidades principales: subida de archivos y bytes, descarga de objetos, listado de objetos, descarga de carpetas, eliminación de objetos y sincronización remota (sync_file) para mantener S3 en espejo con los backups locales.
  • Requisitos: boto3 está listado en requirements.txt y se utiliza para las operaciones con S3.
  • Uso rápido: importa s3.S3 desde s3.py y utiliza sus métodos para subir/descargar o sincronizar los archivos de backup con tu bucket.

Estructura del proyecto

database-backups/
├── main.py                    # Script principal con menú y modo --backup
├── config.json                # Configuración de directorio y cron (opcional)
├── databaseslist.json         # Configuración de bases de datos
├── modules/
│   ├── add_database/
│   │   ├── __init__.py
│   │   └── add_database.py    # Módulo para agregar DBs
│   ├── remove_database/
│   │   ├── __init__.py
│   │   └── remove_database.py # Módulo para remover DBs
│   ├── list_databases/
│   │   ├── __init__.py
│   │   └── list_databases.py  # Módulo para listar DBs
│   ├── config/
│   │   ├── __init__.py
│   │   └── config.py          # Módulo para configurar sistema
│   ├── create_cron/
│   │   ├── __init__.py
│   │   └── create_cron.py     # Módulo para crear crontab
│   ├── manage_cron/
│   │   ├── __init__.py
│   │   └── manage_cron.py     # Módulo para gestionar crontab
│   └── backup_databases/
│       ├── __init__.py
│       └── backup_databases.py # Módulo para backups
└── .venv/                     # Entorno virtual (opcional)

Configuración de zona horaria

El sistema usa la hora del servidor. Para configurar la zona horaria (ej. Santiago de Chile):

sudo timedatectl set-timezone America/Santiago

Automatización con Cron

Para ejecutar backups automáticamente, agrega al crontab:

crontab -e

Ejemplo para backups diarios a las 2 AM:

0 2 * * * cd /home/deployer/proyectos/database-backups ; /home/deployer/proyectos/database-backups/.venv/bin/python main.py --backup

Nota: Usa ; en lugar de && para que el cd funcione en crontab, ya que cada comando se ejecuta en una shell separada. El script de creación de crontab ya usa ;.

Solución de problemas

  • Error de conexión: Verifica que el contenedor esté corriendo y las credenciales sean correctas.
  • Puertos: El sistema detecta automáticamente el puerto mapeado del contenedor.
  • Permisos: Asegúrate de que el usuario tenga acceso a Docker y los directorios de backups.
  • Permisos en directorio base para crontab: Si los backups no se crean automáticamente via cron, verifica que el usuario que ejecuta el crontab (generalmente el usuario del sistema) tenga permisos de escritura en el directorio base configurado (ej. /home/deployer/backups). Si el directorio fue creado por otro usuario (como root), cambia la propiedad con sudo chown -R usuario:usuario /ruta/del/directorio. De lo contrario, el backup fallará silenciosamente sin generar logs. Además, asegúrate de que el entorno virtual (.venv) sea accesible para el usuario del crontab.
  • Logs: Revisa /home/deployer/backups/logs/ para detalles de errores.

Contribución

Siéntete libre de contribuir mejoras o reportar issues.

Licencia

Este proyecto es de código abierto. Úsalo bajo tu propio riesgo.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages