Feb 21

Escrito por: neTo

Existen varias maneras de respaldar base de datos MySQL, en este post unicamente mostraré una manera de hacerlo utilizando mysqldump() y PHP.

Basicamente lo que se realiza es un resplado de todas las bases de datos, por lo que el script debe ejecutarse como un usuario que tenga permisos sobre todas las bases. Adicionalmente se mantiene en disco las ultimas 3 copias de los respaldos.

  1. <?php
  2. // Realiza el Backup de las bases de datos
  3. $bdd = "--all-databases";
  4. $opt = "";
  5.  
  6. $backupFile = date("Y-m-d-H-i-s") . '.gz';
  7. $command = "mysqldump --opt $opt $bdd | gzip > $backupFile";
  8.  
  9. exec($command, $salida);
  10.  
  11. // Mantiene los ultimos 3 backups
  12. $days=3;
  13. $archivos = scandir("./");
  14. foreach ($archivos as $key => $val)
  15. {
  16. if(substr($val,-2) != "gz")
  17. unset($archivos[$key]);
  18. }
  19.  
  20. $i=count($archivos);
  21. foreach ($archivos as $key => $val)
  22. {
  23. if($i<=$days)
  24. break;
  25. unlink($val);
  26. $i--;
  27. }
  28. ?>

Descargar el código: backup

Otros post


Este post ha sido visto 5656 veces

9 Respuestas to “Respaldar Base de Datos MySQL con PHP”

  1. gama Dice:

    oyes y la conexcion como quedaria?
    y para programarlo en cron tambien?

  2. neTo Dice:

    La idea es ejecutarlo con un cron de un usuario que tenga los permisos sobre las bases de datos de tal forma no requieres autenticarte, sin embargo si deseas especificarlo con otro usuario puedes cambiar la linea 7 asi:

    $command = “mysqldump -p[password] -u user_name –opt $opt $bdd | gzip > $backupFile”;

    para el cron solo basta con ejecutar el comando:
    php ruta_archivo/archivo.php
    especificando antes cada cuanto deseas que se ejecute el cron…. me avisas cualquier duda

  3. javier Dice:

    Esto no funciona en windows, yo tengo un servidor en windows 2000 y no realiza la copia.
    Como seria bajo windows!

  4. neTo Dice:

    Que error te entrega?. Es posible que no tengas instalado mysqldump o que la ruta donde esta instalado no esta agregada en las variables de entorno de sisetma, especificamente a la variable PATH.

  5. Enrique Dice:

    Hola q tal se que este post es muy viejo pero ahora tengo la necesidad de respaldar una BD, y necesito saber que cargo en la varianle $opt?

    Agradesco su ayuda.

  6. neTo Dice:

    No es necesario colocar nada, si deseas puedes utilizarla para agregar comandos al mysqldump() como por ejemplo, si deseas especificar el protocolo podrias utilizar la variable $opt asi:

    $opt =’–protocol=SOCKET’

    Como digo, en realidad es una variable abierta para especificar comandos adicionales.

  7. Enrique Dice:

    Ok gracias por el aporte, en realidad ejecuto el script, pero me cra el respaldo sin archivos, es decir, crea el punto zip, pero con 0 bytes, sin nada de información.

    Agradezco de antemano su ayuda.

  8. neTo Dice:

    Enrique, de lo que entiendo estas ejecutando el script desde un navegador, este esta diseñado para ejecturalo con un cron job (o tarea programada) del usuario root en linux. Entiendo que ese es el problema, ahora lo que puedes hacer es agregarles los parametros en la variable $opt para que especifiques el usuario y contraseña que tiene acceso a las bases de datos que deseas respaldar.

    Te puedes informar de todos los comandos adicionales de mysqldump() en http://dev.mysql.com/doc/refman/5.0/es/mysqldump.html

  9. Pablo Veintmilla Dice:

    Desde consola podríamos usar:
    mysqldump –opt -u usuario -p basedadatos tabla > archivo.sql

    Tabla es opcional, lo usamos si queresmos respaldar solo una tabla
    Archivo es el nombre de archivo donde se guardará el respaldo.

Escribe tú comentario

Switch to our mobile site