Daniel López Azaña

Tema

Social Media

myphp-backup - Utilidad open source PHP para copias de seguridad MySQL

Herramienta ligera en PHP para copias de seguridad rápidas y confiables de bases de datos MySQL. Scripts simples para respaldos automáticos completos o parciales con compresión gzip. Utilizada por miles de desarrolladores en todo el mundo para WordPress, Laravel y aplicaciones PHP personalizadas. Publicada en GitHub como contribución open source.

Disponible en:GitHub

En 2012, mientras gestionaba docenas de sitios web y aplicaciones basadas en PHP, me enfrentaba a un desafío recurrente: las copias de seguridad de bases de datos MySQL eran innecesariamente complicadas. La herramienta estándar mysqldump requería acceso shell (a menudo no disponible en hosting compartido), mientras que los scripts PHP existentes para backups eran o bien excesivamente complejos o simplemente no funcionaban de manera confiable. Necesitaba algo simple, rápido y absolutamente fiable. Así que desarrollé myphp-backup, un par de scripts PHP ligeros que desde entonces han sido adoptados por miles de desarrolladores en todo el mundo para realizar copias de seguridad y restauración de bases de datos MySQL.

Utilidad PHP MySQL myphp-backup en GitHub

El desafío: copias de seguridad simples y confiables en PHP

El problema con las soluciones existentes

A principios de la década de 2010, los desarrolladores PHP que gestionaban sitios WordPress, aplicaciones personalizadas o sistemas de gestión de contenido enfrentaban varios desafíos con las copias de seguridad de bases de datos:

Limitaciones de acceso shell:

  • Muchos proveedores de hosting compartido deshabilitaban el acceso shell.
  • La herramienta mysqldump en línea de comandos no estaba disponible en entornos restringidos.
  • Las herramientas de backup de cPanel a menudo resultaban incómodas e inflexibles.
  • Los scripts de backup automatizados requerían acceso SSH.

Las soluciones PHP existentes eran inadecuadas:

  • Scripts sobrecargados: miles de líneas para tareas simples
  • Ejecución poco confiable: agotamiento de memoria en bases de datos grandes
  • Manejo deficiente de errores: fallos silenciosos sin diagnósticos
  • Dependencia de proveedores: atados a frameworks o CMS específicos
  • Dependencias complejas: bibliotecas requeridas no siempre disponibles

Consecuencias reales:

  • Sitios web sin copias de seguridad confiables.
  • Horas perdidas en resolución de problemas de backup.
  • Incidentes de pérdida de datos cuando se necesitaba restauración.
  • Scripts personalizados costosos para tareas simples.

El caso de uso

Estaba gestionando numerosos sitios web de clientes en diferentes entornos de hosting:

  • Sitios WordPress en hosting compartido (acceso limitado)
  • Aplicaciones PHP personalizadas con bases de datos MySQL
  • Entornos de desarrollo que requerían snapshots frecuentes de bases de datos
  • Flujos de trabajo de prueba que necesitaban capacidades de restauración rápida
  • Planes de recuperación ante desastres que requerían backups automatizados

Requisitos:

  • Funcionar en CUALQUIER entorno PHP (≥ PHP 5.0.5).
  • Sin dependencias externas más allá de la extensión MySQL.
  • Manejar bases de datos con cientos de tablas.
  • Soportar backups parciales (solo tablas específicas).
  • Compresión gzip para eficiencia de almacenamiento.
  • Ejecución rápida sin agotamiento de memoria.
  • Suficientemente simple para entender y modificar.
  • Ejecución por línea de comandos y web.

La solución: dos scripts simples y potentes

Desarrollé myphp-backup como dos scripts PHP complementarios que totalizan menos de 500 líneas de código limpio y documentado:

1. myphp-backup.php - Utilidad de backup de bases de datos 2. myphp-restore.php - Utilidad de restauración de bases de datos

Filosofía de diseño

Simplicidad ante todo:

  • Scripts de un solo archivo que no requieren instalación.
  • Comunicación directa con MySQL sin capas de abstracción.
  • Configurable mediante simples defines al inicio de cada archivo.
  • Copiar, configurar, ejecutar: eso es todo.

Optimizado para rendimiento:

  • Procesamiento por lotes previene el agotamiento de memoria.
  • Tamaños de lote configurables para diferentes entornos.
  • Escritura incremental de archivos mantiene la huella de memoria mínima.
  • Compresión gzip eficiente sobre la marcha.

Listo para producción:

  • Manejo integral de errores y reportes.
  • Salida de progreso para monitorear operaciones largas.
  • Archivos de backup con marca de tiempo para identificación fácil.
  • Creación automática de directorios.
  • Manejo de restricciones de clave foránea.

Características y capacidades principales

1. Opciones flexibles de backup

Backup completo de base de datos:

define("TABLES", '*'); // Backup de toda la base de datos

Backup parcial:

define("TABLES", 'tabla1, tabla2, tabla3'); // Solo tablas específicas

Exclusión de tablas:

define('IGNORE_TABLES', array(
    'datos_cache',
    'registros_temporales'
)); // Omitir tablas específicas

Beneficios:

  • Respaldar solo lo que necesitas.
  • Omitir datos de caché y temporales.
  • Reducir tamaño y tiempo de backup.
  • Flexibilidad para diferentes escenarios.

2. Compresión gzip automática

Backups comprimidos:

define("GZIP_BACKUP_FILE", true); // Habilitar compresión

Resultados:

  • Archivos de backup 5-10x más pequeños.
  • Transferencias remotas más rápidas.
  • Reducción de costos de almacenamiento.
  • Manejo automático de archivos .gz.

Salida:

myphp-backup-database-20251203-143022.sql.gz

3. Procesamiento eficiente en memoria

Sistema de procesamiento por lotes:

define("BATCH_SIZE", 1000); // Filas por lote

Cómo funciona:

  • Procesa tablas grandes en lotes configurables.
  • Cada lote se escribe al archivo inmediatamente.
  • El uso de memoria permanece constante independientemente del tamaño de la tabla.
  • Previene el agotamiento del memory_limit de PHP.

Impacto real:

  • Respaldar bases de datos con millones de filas.
  • Trabajar en entornos de hosting con restricciones.
  • No se necesita configuración de límite de memoria.
  • Ejecución confiable en cualquier servidor.

4. Modos de ejecución inteligentes

Ejecución por navegador web:

  • Subir script vía FTP.
  • Acceder vía URL: http://ejemplo.com/myphp-backup.php.
  • Monitorear progreso en tiempo real.
  • Funciona sin acceso shell.

Ejecución por línea de comandos:

php myphp-backup.php

Beneficios:

  • Perfecto para trabajos cron.
  • Backups programados automatizados.
  • Automatización del lado del servidor.
  • Integración con scripts de despliegue.

5. Capacidades inteligentes de restauración

Detección automática:

  • Detecta archivos SQL comprimidos vs. planos.
  • Maneja archivos de cualquier tamaño.
  • Procesamiento incremental previene timeouts.
  • Reportes de errores completos.

Restauración segura:

define("DISABLE_FOREIGN_KEY_CHECKS", true);

Características:

  • Deshabilita temporalmente restricciones de claves foráneas.
  • Previene errores de violación de restricciones.
  • Rehabilita automáticamente después de restaurar.
  • Estado limpio garantizado.

Adopción y impacto en el mundo real

Estadísticas de la comunidad

205+
Estrellas en GitHub
Desarrolladores que marcaron el proyecto
119+
Forks
Desarrolladores que clonaron y adaptaron los scripts

Casos de uso en diferentes industrias

Desarrolladores WordPress:

  • Snapshots de base de datos pre-actualización.
  • Clonación de entornos de desarrollo.
  • Migraciones de sitios de clientes.
  • Backups de recuperación ante desastres.

Desarrolladores de aplicaciones PHP:

  • Backups automatizados nocturnos.
  • Actualizaciones de entornos de prueba.
  • Flujos de trabajo de migración de datos.
  • Pipelines de integración continua.

Administradores de sistemas:

  • Soluciones de backup para hosting compartido.
  • Automatización de backup multi-tenant.
  • Procedimientos de recuperación ante desastres.
  • Flujos de trabajo de desarrollo a producción.

Testimonios reales:

Los issues y forks del proyecto en GitHub demuestran uso mundial en:

  • Plataformas de comercio electrónico
  • Instituciones educativas
  • Intranets corporativas
  • Aplicaciones SaaS
  • Sistemas de gestión de contenido

Implementación técnica

El proceso de backup

1. Conexión a la base de datos:

$conn = mysqli_connect($host, $username, $passwd, $dbName);
mysqli_set_charset($conn, $charset);

2. Descubrimiento de tablas:

$result = mysqli_query($conn, 'SHOW TABLES');
while($row = mysqli_fetch_row($result)) {
    $tables[] = $row[0];
}

3. Exportación de estructura:

$row = mysqli_fetch_row(mysqli_query($conn, 'SHOW CREATE TABLE `'.$table.'`'));
$sql .= "\n\n".$row[1].";\n\n";

4. Exportación de datos por lotes:

for ($b = 1; $b <= $numBatches; $b++) {
    $query = 'SELECT * FROM `' . $table . '` 
              LIMIT ' . ($b * $batchSize - $batchSize) . ',' . $batchSize;
    $result = mysqli_query($conn, $query);
    
    // Procesar y escribir lote
    file_put_contents($backupFile, $sql, FILE_APPEND | LOCK_EX);
}

5. Compresión:

$fpOut = gzopen($dest, 'wb9'); // Compresión máxima
while (!feof($fpIn)) {
    gzwrite($fpOut, fread($fpIn, 1024 * 256));
}

El proceso de restauración

1. Detección de archivo:

$backupFileIsGzipped = substr($backupFile, -3, 3) == '.gz' ? true : false;
if ($backupFileIsGzipped) {
    $backupFile = $this->gunzipBackupFile();
}

2. Ejecución incremental de SQL:

$handle = fopen($backupDir . '/' . $backupFile, "r");
while (($line = fgets($handle)) !== false) {
    $sql .= $line;
    if (preg_match('/;$/', $line)) {
        mysqli_query($this->conn, $sql);
        $sql = '';
    }
}

Características para producción

Optimizado para rendimiento en bases de datos desde pequeñas hasta masivas (millones de filas).
Baja huella de memoria gracias al procesamiento por lotes y escritura incremental.
Funciona en cualquier lugar: hosting compartido, VPS, servidores dedicados o desarrollo local.
Cero dependencias: solo requiere PHP con extensión MySQL (incluida en prácticamente todas las instalaciones PHP).
Fácil de personalizar: código limpio y bien documentado que es simple de adaptar para necesidades específicas.

Ejemplo de uso

Configuración básica de backup:

/**
 * Editar estos parámetros en myphp-backup.php
 */
define("DB_USER", 'tu_usuario');
define("DB_PASSWORD", 'tu_contraseña');
define("DB_NAME", 'tu_base_de_datos');
define("DB_HOST", 'localhost');

define("BACKUP_DIR", 'myphp-backup-files');
define("TABLES", '*'); // Backup completo
define("CHARSET", 'utf8');
define("GZIP_BACKUP_FILE", true);
define("BATCH_SIZE", 1000);

Ejecutar backup:

Por navegador web:

http://www.ejemplo.com/myphp-backup.php

Por línea de comandos:

php myphp-backup.php

Backups automatizados (Cron):

# Backup diario a las 3 AM
0 3 * * * cd /ruta/a/scripts && php myphp-backup.php

Salida:

2025-12-03 14:30:22 - Backing up `wp_posts` table...OK
2025-12-03 14:30:24 - Backing up `wp_postmeta` table...OK
2025-12-03 14:30:26 - Backing up `wp_users` table...OK
...
2025-12-03 14:31:45 - Gzipping backup file... OK
Backup result: OK

Configuración de restauración:

/**
 * Editar estos parámetros en myphp-restore.php
 */
define("DB_USER", 'tu_usuario');
define("DB_PASSWORD", 'tu_contraseña');
define("DB_NAME", 'tu_base_de_datos');
define("DB_HOST", 'localhost');

define("BACKUP_DIR", 'myphp-backup-files');
define("BACKUP_FILE", 'myphp-backup-database-20251203-143022.sql.gz');
define("CHARSET", 'utf8');

Ejecutar restauración:

php myphp-restore.php

Impacto open source

¿Por qué open source?

Aunque originalmente se desarrolló para mis propios proyectos de clientes, publiqué myphp-backup como software open source bajo licencia GPL-3.0 porque:

1. Necesidad universal

  • Las copias de seguridad de bases de datos son fundamentales para todos los proyectos PHP/MySQL.
  • No existía una buena solución simple en el dominio público.
  • Miles de desarrolladores enfrentan el mismo problema diariamente.

2. Mejora comunitaria

  • Los reportes de bugs de casos de uso diversos mejoraron la confiabilidad.
  • Las sugerencias de características aumentaron la funcionalidad.
  • Las revisiones de código aseguraron calidad y seguridad.

3. Empoderamiento de desarrolladores

  • Proporciona a los desarrolladores PHP una solución confiable de backup.
  • Reduce la dependencia de servicios de backup costosos.
  • Habilita recuperación ante desastres para proyectos con presupuestos limitados.

4. Valor educativo

  • El código limpio sirve como material de aprendizaje.
  • Demuestra mejores prácticas de PHP/MySQL.
  • Muestra técnicas efectivas de procesamiento por lotes.

Mantenimiento continuado

El proyecto ha sido mantenido activamente desde 2012:

  • Actualizaciones regulares para compatibilidad con versiones de PHP.
  • Correcciones de bugs basadas en feedback de la comunidad.
  • Mejoras de características para versiones modernas de MySQL.
  • Mejoras de documentación para mayor claridad.

La simplicidad de la base de código facilita su mantenimiento y asegura viabilidad a largo plazo.

Logros técnicos

Más de 200 estrellas en GitHub demostrando adopción generalizada y confianza.
Más de 119 forks mostrando uso activo y personalización.
Utilizada globalmente en entornos de producción en múltiples industrias.
Más de 10 años de mantenimiento activo y actualizaciones.
Contribución al ecosistema open source de PHP con una solución práctica y probada en batalla.

Conclusión

myphp-backup demuestra que a veces las mejores soluciones son las más simples. Al centrarse en la funcionalidad principal, código limpio y compatibilidad universal, este proyecto ha servido a miles de desarrolladores durante más de una década. Prueba que las contribuciones open source no necesitan ser frameworks complejos o tecnologías revolucionarias; a veces, una utilidad bien diseñada que resuelve un problema común de manera elegante es exactamente lo que la comunidad necesita.

El proyecto continúa siendo utilizado activamente y mantenido, sirviendo como una solución confiable de backup para aplicaciones PHP/MySQL en todo el mundo. Su longevidad y adopción validan los principios de diseño de simplicidad, confiabilidad y compatibilidad universal.


¿Necesitas desarrollo en PHP o experiencia en gestión de bases de datos?

Para proyectos que requieran:

  • Desarrollo de aplicaciones PHP y optimización.
  • Arquitectura y gestión de bases de datos.
  • Soluciones de backup y recuperación ante desastres.
  • Desarrollo WordPress y plugins personalizados.

Aporto décadas de experiencia en desarrollo PHP, optimización MySQL y construcción de sistemas confiables. Disponible para consultoría y desarrollo en aplicaciones web y proyectos de bases de datos.

Ponte en contacto →

Daniel López Azaña

Sobre el autor

Daniel López Azaña

Emprendedor tecnológico y arquitecto cloud con más de 20 años de experiencia transformando infraestructuras y automatizando procesos.

Especialista en integración de IA/LLM, desarrollo con Rust y Python, y arquitectura AWS & GCP. Mente inquieta, generador de ideas y apasionado por la innovación tecnológica y la IA.

Proyectos relacionados

SDK cliente Rust para IG.com publicado en crates.io para trading algorítmico y datos de mercado en tiempo real

Cliente Rust para IG.com - SDK open source para trading algorítmico

SDK profesional en Rust para la API REST y Streaming del broker IG.com. Primera biblioteca cliente completa en Rust que permite integración con plataformas de trading algorítmico, gestión de cuentas, ejecución de órdenes y datos de mercado en tiempo real. Publicado en crates.io como contribución open source.

Proyecto open source2024
SDK cliente Rust para Lightstreamer publicado en crates.io para transmisión de datos en tiempo real

Cliente Rust para Lightstreamer - SDK open source para mensajería en tiempo real

SDK profesional en Rust para el servidor de mensajería en tiempo real Lightstreamer. Implementa el protocolo TLCP con soporte WebSocket, permitiendo transmisión de datos en vivo para aplicaciones financieras, sistemas IoT y plataformas en tiempo real. Publicado en crates.io como contribución open source al ecosistema Rust.

Proyecto open source2024-2025
Integración de protocolo OAuth para conectividad segura de sitios

Integración OAuth para plataforma de tracking de rutas - Sistema seguro de partnerships de marca blanca

Sistema de autenticación y autorización OAuth 1.0 para red social alemana de tracking de rutas, habilitando integración segura de marca blanca con sitios web de partners. Implementación de librería OAuth PHP personalizada permitiendo a sitios terceros consumir datos de rutas, autenticación de usuarios y características sociales mientras se mantiene aislamiento de datos por partner. Prueba de concepto de integración con phpFox demostrando compatibilidad cross-platform. Desarrollo de 3 meses entregando solución completa de proveedor y consumidor OAuth.

Confidencial: plataforma alemana de tracking de rutas2012

Comentarios

Sé el primero en comentar

Enviar comentario

¿Tienes un proyecto similar en mente?

Hablemos sobre cómo puedo ayudarte a alcanzar tus objetivos

Iniciar conversación