Crea backups de tu BD mysql fácilmente desde PHP

Cualquier webmaster que disponga de una web con una base de datos quiere poder realizar copias de la misma sin mucha compliciación, pues no siempre dispone de conocimientos informáticos para realizarla desde aplicaciones externas a la web (como PHPMyAdmin) o simplemente desea un método más rápido para disponer de una copia a la última.

Por ello, os presento un pequeño script php con el que realizar copias de la base de datos completa en segundos y guardarla en un zip.

PHP + Mysql

 

El script hará uso del programa mysqldump que viene con el mysql. Este programa permite crear una consulta SQL con la cual generar nuestra BD de forma sencilla.  Nuestro script llamará a dicho programa, volcará el resultado sobre un fichero temporal, comprimirá en formato zip dicho fichero y forzará al navegador para su descarga.

Para la compresión en ZIP, haremos uso de la clase zipfile, disponible aquí.

El código php es el siguiente:

<?php
/*
*Autor: ElChicoSinHada
*Fecha: 2-Feb-2009. Licencia: GPL 3
*/
//Añadir comprobaciones de seguridad para que no haga un backup cualquier, depende del sistema usado

require ("zipfile.php");

//Obtenemos la fecha y hora
$hora = date("H-i-s");
$fecha = date("d-m-Y");
//Creamos el nombre del fichero
$filename = "NOMBRE-$fecha($hora)";

//Preparamos la cabecera
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$filename.zip");

$usuario="USER"; // Usuario de la base de datos
$pass="PASS"; // Contraseña
$bd="NOMBREBD"; // Nombre de la Base de Datos

//Creamos un txt en temporales
passthru("touch /tmp/sql.txt", $resultado);
//Ejecutamos el comando msyqldump y guardamos el resultado en el archivo temporal. 

$ejecutar = "mysqldump -u $usuario --password=$pass --opt $bd > /tmp/sql.txt";
passthru($ejecutar, $resultado);

//Generamos el zip
$zipfile = new zipfile();
$zipfile->add_file(implode("",file("/tmp/sql.txt")), "$filename.txt");
//Borramos el archivo, ¡muy importate!
passthru("rm /tmp/sql.txt", $resultado);
//Mostramos el zip para guardarlo
echo $zipfile->file();
?>

Este script está pensando para servidores Unix, si lo vas a usar en un entorno Windows, modifica las rutas de los ficheros temporales y coloca la dirección completa hasta el ejecutable de msyqldum.  

Con solo acceder al url del script comenzará la descarga, por ello, es conveniente colocar previamente un filtro para que solo los usuarios administradores puedan completar el script. Si no dispones de usuarios, se podría hacer mediante un formulario que envie el usuario y la contraseña en vez de introducirlos directamente en el código php.