10-25-2012, 09:51 AM
Salve a tutti, è da un pò di tempo che non frequento il forum ma voglio rimediare postando questa mia ultima "fatica" in cui mi sono imbattuto in questi giorni:
Mi sono trovato a dover programmare un cron job che facesse il backup di un db MySql su uno spazio web.
Se tra di voi c'è qualche "disgraziato" come me che lavora sui db dalla mattina alla sera saprà che per fare il backup di un db MySql o ci si appoggia a mysqldump ma se non si ha accesso alle cartelle principali la cosa diventa intricata e per questo ho deciso di scrivere di sana pianta uno script in php riadattabile a tutte le evenienze, spero che possa esservi utile
p.s. DIAMO UNA SVECCHIATA A QUESTA SEZIONE DI PROGRAMMAZIONE ! che mi piange il cuore sennò
Mi sono trovato a dover programmare un cron job che facesse il backup di un db MySql su uno spazio web.
Se tra di voi c'è qualche "disgraziato" come me che lavora sui db dalla mattina alla sera saprà che per fare il backup di un db MySql o ci si appoggia a mysqldump ma se non si ha accesso alle cartelle principali la cosa diventa intricata e per questo ho deciso di scrivere di sana pianta uno script in php riadattabile a tutte le evenienze, spero che possa esservi utile
Codice:
<?php
set_time_limit(0);
include ("config.inc.php");
//Genero il nome del file di backup
$fileName = strtotime(date("d-m-Y H:i:s"))."-nomedb-backup.sql";
//Query per trovare tutte le tabelle del db
$res = mysql_query("SHOW TABLES");
$command = "-- File di BackUp\n";
//Ciclo l'array ed eseguo lo script per ogni tabella
while ($row = mysql_fetch_assoc($res)) {
$command .= "CREATE TABLE IF NOT EXISTS ".$row['Tables_in_nomedb']."(\n";
$col = mysql_query("SHOW COLUMNS FROM ".$row['Tables_in_nomedb']);
//Field-Type-Null-Key-Default
while ($rowcol = mysql_fetch_assoc($col)) {
$command .= $rowcol['Field']." ".$rowcol['Type'];
if ($rowcol['Key']=='PRI'){$command .= " PRIMARY KEY ";}
if ($rowcol['Extra']=='auto_increment'){$command .= " AUTO_INCREMENT,\n";}
if ($rowcol['Null']=='YES'){$command .= " DEFAULT NULL,\n";}
else if ($rowcol['Null']=='NO' && $rowcol['Extra'] != 'auto_increment'){$command .= " NOT NULL DEFAULT '".$rowcol['Default']."',\n";}
if ($rowcol['Key']=='MUL'){$command .= " KEY ".$rowcol['Field']." (".$rowcol['Field']."),\n";}
}
//Elimino l'ultima virgola
$command = substr($command,0,-2)."\n";
//Completo lo script con l'engine della tabella
$command .= ") ENGINE=MyISAM;\n\n\n";
$col2 = mysql_query("SHOW COLUMNS FROM ".$row['Tables_in_nomedb']);
//Estraggo record della tabella
$col3 = mysql_query("SELECT * FROM ".$row['Tables_in_nomedb']);
//Faccio la insert solo se la tabella non è vuota
if(mysql_affected_rows() > 0){
//Inizio con le insert
$command .= "INSERT INTO ".$row['Tables_in_nomedb']."(";
while ($rowcol = mysql_fetch_assoc($col2)) {
$command .= $rowcol['Field'].",";
}
//Elimino l'ultima virgola
$command = substr($command,0,-1).")\nVALUES (";
$fcount = mysql_num_fields($col3);
while ($rowcol = mysql_fetch_array($col3)) {
for($i=0; $i< $fcount; $i++)
{
$tag = mysql_field_name($col3,$i);
$command .= "'".str_replace("\\","",str_replace("'","''",$rowcol[$i]))."',";
}
//Elimino l'ultima virgola e vado a capo
$command = substr($command,0,-1)."),\n(";
}
$command = substr($command,0,-3).";\n\n";
}
}
//Creao il file,ci scrivo all'interno e richiudo
$fp = fopen('backup/'.$fileName, 'w');
fwrite($fp, $command);
fclose($fp);
mysql_close($conn);
?>
p.s. DIAMO UNA SVECCHIATA A QUESTA SEZIONE DI PROGRAMMAZIONE ! che mi piange il cuore sennò