Un sistema de gestión de backups para bases de datos Docker (PostgreSQL, MySQL/MariaDB, MongoDB) escrito en Python.
- 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étodosync_filepara subir/eliminar).
- Python 3.8+
- Docker (para ejecutar contenedores de bases de datos)
- Bibliotecas Python:
inquirer,pymongo,mysql-connector-python,psycopg2-binary
- Clona o descarga el proyecto.
- Crea un entorno virtual:
python -m venv .venv source .venv/bin/activate # En Linux/Mac
- Instala las dependencias:
pip install inquirer pymongo mysql-connector-python psycopg2-binary
- Asegúrate de que Docker esté corriendo y tengas contenedores de bases de datos activos.
Ejecuta el script principal:
python main.pyPara ejecutar backups sin menú (útil para cron):
python main.py --backup- 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.
Antes de usar backups, configura el directorio base (donde se crearán dumps/ y logs/) y el horario en formato cron.
Crea automáticamente una tarea en cron para ejecutar backups según el horario configurado. Usa python main.py --backup para modo no interactivo.
Muestra las líneas de crontab relacionadas con backups y permite eliminarlas.
- Los dumps se guardan en
/home/deployer/backups/dumps/{db_name}/. - Nombres de archivos:
{db_name}_{dd-mm-yyyy-hh-mm}.sql(o.archivepara 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).
- Descripción: El proyecto añade soporte para almacenar y sincronizar backups en Amazon S3 utilizando la clase
s3.S3definida ens3.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:
boto3está listado enrequirements.txty se utiliza para las operaciones con S3. - Uso rápido: importa
s3.S3desdes3.pyy utiliza sus métodos para subir/descargar o sincronizar los archivos de backup con tu bucket.
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)
El sistema usa la hora del servidor. Para configurar la zona horaria (ej. Santiago de Chile):
sudo timedatectl set-timezone America/SantiagoPara ejecutar backups automáticamente, agrega al crontab:
crontab -eEjemplo 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 ;.
- 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 consudo 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.
Siéntete libre de contribuir mejoras o reportar issues.
Este proyecto es de código abierto. Úsalo bajo tu propio riesgo.