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

Cómo respaldar tu base de datos MySQL con PHP

por entreunosyceros
Publicado el: Última actualización:

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 ...

1 Comentario

quiquex 31 enero, 2016 - 2:10 AM

Gracias por compartirlo

Responder

Deja tu comentario

* Al utilizar este formulario, acepta que este sitio web almacene y maneje sus datos.

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