Inicio Apuntes FPApuntes DAW Cómo respaldar tu base de datos MySQL con PHP

Cómo respaldar tu base de datos MySQL con PHP

Publicado por entreunosyceros
Publicado el: Última actualización:

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.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

1 Comentario

quiquex 31 enero, 2016 - 2:10 AM

Gracias por compartirlo

Respuesta

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.