Cómo respaldar tu base de datos MySQL con PHP
Cómo respaldar tu base de datos MySQL con PHP

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

respaldar mysqlBuscando en los marcadores del navegador me he encontrado un enlace que me ha salvado un poco la vida. Se trata de un fichero para realizar copias de seguridad de bases de datos MySQL ejecutando tan solo un fichero (esto es muy útil cuando un “cliente” quiere realizar habitualmente una copia de seguridad de su base de datos y no quiere entrar dentro de phpMyAdmin ni cosas así). El caso es que añadiéndole una interfaz más o menos bonita podemos ofrecer una manera simple y fácil de realizar las copias de seguridad.

Bueno, antes del código decir que este código no es mío, pertenece a David Walsh, yo lo único que hice es adaptarlo a mis necesidades. En futuros posts quizás añada el interfaz de usuario que le he añadido. Y bueno, ahora el código del archivo, que evidentemente habrá que guardarlo en un archivo php (respaldobd.php por ejemplo).

Respaldar una base de datos MySQL con PHP

backup_tables('servidor','usuario','contraseña','bd');

//En la variable $tables puedes agregar las tablas especificas separadas por comas:
//cosas,cosos,cosicos
//O déjalo con el asterisco '*' para que se respalde toda la base de datos

function backup_tables($host,$user,$pass,$name,$tables = '*')
{

   $link = mysql_connect($host,$user,$pass);
   mysql_select_db($name,$link);

   //obtener todas las tablas
   if($tables == '*')
   {
      $tables = array();
      $result = mysql_query('SHOW TABLES');
      while($row = mysql_fetch_row($result))
      {
         $tables[] = $row[0];
      }
   }
   else
   {
      $tables = is_array($tables) ? $tables : explode(',',$tables);
   }

   //ciclo para recorrer
   foreach($tables as $table)
   {
      $result = mysql_query('SELECT * FROM '.$table);
      $num_fields = mysql_num_fields($result);
      $return="";
      $return.= 'DROP TABLE '.$table.';';
      $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
      $return.= "nn".$row2[1].";nn";

    for ($i = 0; $i < $num_fields; $i++)
      {
         while($row = mysql_fetch_row($result))
         {
            $return.= 'INSERT INTO '.$table.' VALUES(';
            for($j=0; $j<$num_fields; $j++)
            {
               $row[$j] = addslashes($row[$j]);
               $row[$j] = preg_replace('/n/','/\n/',$row[$j]);
               if (isset($row[$j])){$return.= '"'.$row[$j].'"';}else{$return.='""';}
               if ($j<($num_fields-1)) { $return.= ','; }
            }
            $return.= ");n";
         }
      }
      $return.="nnn";
   }

   //guardar en un archivo .sql
   $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
   fwrite($handle,$return);
   fclose($handle);
}

Al ejecutarse se va a generar un archivo .sql en la carpeta donde se encuentra el archivo de la función.

Quiero aclarar que esto es lo que a mi me ha valido. El código no guarda las relaciones entre tablas, y guarda los nombres de las tablas sin espacios (ya que a quién le interesó tenía los nombres de sus tablas con guiones bajos, no con espacios).

Como he dicho anteriormente, en próximas entregas quizás publique también el interfaz de usuario que se le puede añadir a este fantástico script. En esa interfaz también he añadido una opción para restaurar estas copias de seguridad, si no se dispone de ella supongo que la manera más sencilla de restaurar esta copia de seguridad será mediante phpMyAdmin.







¿Qué te ha parecido este post?

¡Haz clic en una estrella para calificarla!

Puntuación media 0 / 5. Recuento de votos: 0

¡No hay votos hasta ahora! Sé el primero en calificar esta publicación.

No te pierdas otros artículos ...

¡Síguenos en las redes sociales!

¡Lamentamos que esta publicación no te haya sido útil!

¡Permítanos mejorar esta publicación!

¿Cuéntanos cómo podemos mejorar esta publicación?

Esta entrada tiene un comentario
  1. quiquex

    Gracias por compartirlo

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.