Buscando 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.
1 Comentario
Gracias por compartirlo