Script de copia de seguridad de bases de datosDesarrollo y personalización

Un script de Bash o Python que hace copias de seguridad de su base de datos MySQL o PostgreSQL y conserva solo las copias que elija

Suele estar listo en 15 minutosCambios incluidosControl de calidad
Paquetes
Protección de pagoDetalles
  • Los cambios dentro del paquete son gratuitos.
  • Si no responde en los 3 días siguientes a la entrega, el trabajo se acepta automáticamente.

El dinero queda reservado al pagar y solo se libera cuando usted acepta el trabajo.

Un script de Bash o Python que hace copias de seguridad de su base de datos MySQL o PostgreSQL y conserva solo las copias que elija

Ejemplo de resultado

Ejemplo del paquete Estándar

Unir los archivos de ventas mensuales de 9 tiendas en un único informe de Excel

Cómo se ejecuta

python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO  Carpeta: sales/2026-10, 9 archivos encontrados
2026-11-02 09:14:03 INFO  shop-01.csv: 1.284 filas
2026-11-02 09:14:04 INFO  shop-02.xlsx: 967 filas
2026-11-02 09:14:04 WARN  shop-07.csv: 3 filas sin precio omitidas (líneas 88, 412, 913)
2026-11-02 09:14:05 INFO  Listo: 10.412 filas -> report-2026-10.xlsx (hojas “Ventas” y “Totales”)

Configuración, no código

Los nombres de columna de cada tienda están en settings.ini, así que una tienda nueva o una columna renombrada es una línea ahí:

[columns]
date = Fecha, Fecha de venta, Día
product = Producto, Artículo, Nombre
quantity = Cant., Cantidad, Uds.
price = Precio, Precio unitario

Una parte del código

def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
    """Lee el archivo de una tienda y le da los nombres de columna del informe."""
    table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
    renamed = {}
    for name, variants in columns.items():
        found = next((c for c in table.columns if c.strip() in variants), None)
        if found is None:
            raise ReportError(f"{path.name}: no hay columna para '{name}' (se buscó {', '.join(variants)})")
        renamed[found] = name
    table = table.rename(columns=renamed)[list(columns)]
    table["shop"] = path.stem
    return table

Archivos: un archivo ZIP con merge_sales.py (310 líneas), settings.ini, requirements.txt y un README sobre cómo instalar Python, ejecutar el script y qué significa cada mensaje del registro. El cliente lo ejecuta en su propio ordenador.

Cliente: una pequeña cadena de 9 papelerías; cada tienda envía sus ventas del mes en un archivo CSV o Excel, con nombres de columna ligeramente distintos. Tarea: un único script que lea todos los archivos de una carpeta, dé a las columnas un mismo formato y genere un solo informe de Excel con todas las ventas y una hoja de totales por tienda.

El cliente y todos los datos son ficticios.

Acerca de este servicio

Una base de datos sin copias periódicas está a una mala actualización o a un disco lleno de perder pedidos, entradas o registros de clientes. Este script, en Bash o Python según convenga a su servidor, hace un volcado completo de su base de datos MySQL, MariaDB o PostgreSQL con las herramientas que vienen con ella (mysqldump o pg_dump), lo comprime, le pone la fecha en el nombre y conserva solo las copias que dicten sus reglas, por ejemplo 7 diarias, 4 semanales y 6 mensuales; las más antiguas se eliminan solo según esas reglas. La contraseña de la base de datos va en el archivo de opciones estándar que usted rellena en su servidor (.my.cnf o .pgpass), nunca en el código. Usted lo instala y lo ejecuta en su propio servidor; nunca iniciamos sesión en él. Pruébelo primero con una copia de prueba y restaure una copia en una base de datos de prueba para asegurarse de que funciona.

Qué incluye

  • Qué recibeUn archivo ZIP con el script, un README con instrucciones paso a paso y, desde Estándar, un archivo de configuración con bases de datos, carpetas y cuántas copias conservar; el código también se muestra en la página del pedido.
  • Herramientas estándarmysqldump o pg_dump, nada raro que instalar
  • Rotación según sus reglasLas copias antiguas solo se eliminan como usted fije
  • Contraseña fuera del códigoEn .my.cnf o .pgpass en su servidor
  • Fallos detectadosDesde Estándar, un volcado fallido o vacío se registra y no cuenta como copia
  • Código legibleCon comentarios, fácil añadir una base de datos más adelante

Cómo funciona

  1. 1
    TareaUsted describe el servidor, las bases de datos y cuántas copias conservar
  2. 2
    CódigoEscribimos el script y la guía para instalarlo
  3. 3
    PruébeloLo ejecuta con una copia de prueba y restaura una copia en una base de datos de prueba
  4. 4
    CambiosPide cambios dentro de su paquete y nos envía cualquier mensaje de error

Qué necesitamos de usted

La base de datos (MySQL, MariaDB o PostgreSQL) y su versión, el sistema del servidor (por ejemplo Ubuntu 22.04) y si puede instalar paquetes en él, el tamaño de la base de datos, dónde deben guardarse las copias y cuánto espacio hay. Sus reglas de rotación: cuántas copias diarias, semanales y mensuales conservar. Para Premium, el segundo lugar para las copias y la dirección para los correos de fallo. No envíe nunca contraseñas ni accesos al servidor.

Le preguntaremos:

  • ¿Qué base de datos y de qué tamaño?
  • ¿En qué servidor está?
  • ¿Cuántas copias conservar?
  • ¿Dónde deben ir las copias?
  • ¿Bash o Python?

Comparar paquetes

PaquetesBásicoUna base de datos16 US$EstándarCopia de seguridad con configuración33 US$PremiumHerramienta de copias de seguridad67 US$
Plazo1 día2 días3 días
Cambios123
Códigohasta 150 líneashasta 400 líneashasta 1.000 líneas
Archivos de código1hasta 3hasta 8
Archivo de configuraciónNoSíSí
Mensajes de error claros y registroNoSíSí
Opciones de ejecución y guía para ejecutarlo de forma programadaNoNoSí
Guía de instalación y uso (README)SíSíSí
LenguajeBash o PythonBash o PythonBash o Python
Hacer pedido BásicoHacer pedido EstándarHacer pedido Premium

Protección de pago

Usted paga al hacer el pedido, pero el dinero solo se libera por un trabajo aceptado.

  • Precio fijoEl precio del paquete no cambia después del pago.
  • El dinero queda reservadoAl pagar, el importe solo queda reservado. Pasa a Dleex cuando usted acepta el trabajo.
  • Revisado antes de la entregaCada resultado pasa un control de calidad antes de llegar a usted, y lo ve en la página del pedido antes de aceptarlo.
  • Cambios gratuitosSolicite cambios dentro de su brief tantas veces como permita el paquete.
  • Aceptación a los 3 díasSi en los 3 días siguientes a la entrega no acepta el trabajo ni solicita cambios, se acepta automáticamente. Si escribe en el chat del pedido después de la entrega, el pedido queda en espera; cuando le respondamos, podremos reiniciar el plazo de 3 días y se lo indicaremos en el chat.
  • Rehacer el trabajo o reembolso totalSi el resultado no se ajusta a su brief y los cambios no lo resolvieron, o el trabajo tarda más del doble de su plazo, escriba en el chat del pedido: rehacemos el trabajo o le reembolsamos el pago íntegro.
Cómo funciona →

Preguntas y respuestas

¿Borrará las copias de seguridad antiguas?

Solo según las reglas que dé, como conservar 7 copias diarias y 4 semanales, y solo en la carpeta de copias en la que escribe. Hasta que fije las reglas, lo conserva todo.

¿Puedo guardar las copias fuera del servidor?

Premium copia cada copia de seguridad a un segundo disco o a un almacenamiento que ya tenga, usando su propia herramienta de línea de comandos y sus propias claves, que usted pone en su configuración.

¿Bloquea la web mientras se ejecuta?

Para las tablas InnoDB de MySQL y para PostgreSQL, el volcado se hace sin detener la web. Las bases de datos muy grandes aún pueden ralentizarla, así que ejecútelo en una hora tranquila.

¿Lo instalarán ustedes en mi servidor?

No. Nunca iniciamos sesión en su servidor. El README explica cada paso, desde copiar el script hasta añadirlo a cron (Premium).

¿No encontró su respuesta?

Paquetes