Hacer un backup de base de datos MySQL usando PHP

Muchas veces tenemos problemas de seguridad en nuestras páginas webs, es altamente recomendable tener preparadas tareas automáticas para que se ejecuten y salven los datos cada cierto tiempo. Con el siguiente script realizamos una copia de las tablas que deseamos exceptuando los nombres de las que pasamos como parámetro, en mi caso los logs no los copio.

Backup

backup_tables('servidor','usuario','contrasena','bd','tabla1,tabla2');
 
function backup_tables($host,$user,$pass,$name,$tablesNo)
 {
 $link = mysql_connect($host,$user,$pass);
 mysql_select_db($name,$link);
 
//get all of the tables
 $tables = array();
 $tablesNoBackup = explode(',',$tablesNo);
 
$result = mysql_query('SHOW TABLES');
 while($row = @mysql_fetch_row($result))
 {
 $tables[] = $row[0];
 }
 
//cycle through
 foreach($tables as $table)
 {
 if(!in_array($table, $tablesNoBackup))
 {
 $result = mysql_query('SELECT * FROM '.$table);
 $num_fields = mysql_num_fields($result);
 
$return.= 'DROP TABLE '.$table.';';
 $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
 $return.= "\n\n".$row2[1].";\n\n";
 
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] = ereg_replace("\n","\\n",$row[$j]);
 if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
 if ($j<($num_fields-1)) { $return.= ','; } } $return.= ");\n"; } } $return.="\n\n\n"; } } //save file $handle = fopen('db-backup-'.date("Ymd").'-'.(md5(implode(',',$tables))).'.sql','w+'); fwrite($handle,$return); fclose($handle); }

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *