Saltar al contenido

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); }