Indice

Funzione Php per backup di database Mysql

Autore: David Walsh
Ultima revisione: 18/08/2008

tratta da "Backup Your MySQL Database Using PHP"

La funzione in questione puo' fare il backup di un intero db oppure di una singola tabella. Per fare il backup di una singola tabella basta sostituire il carattere * con il nome della tabella da copiare.

Utilizzo

backup_tables($DBHOST,$DBUSER,$DBPASS,$DBNAME,'*') ;

Codice sorgente

function backup_tables($host,$user,$pass,$name,$tables = '*')
{
 
	$link = mysql_connect($host,$user,$pass);
	mysql_select_db($name,$link);
 
	//get all of the tables
	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);
	}
 
	//cycle through
	foreach($tables as $table)
	{
		$result = mysql_query('SELECT * FROM '.$table);
		$num_fields = mysql_num_fields($result);
 
		@$return.= 'DROP TABLE IF EXISTS '.$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('../backups/'.$name.'-'. date("Y-m-d-H.m.s").'.sql','w+');
	fwrite($handle,$return);
	fclose($handle);
}

N.B. ricordarsi di cambiare il percorso e il nome della file alla terzultima riga.