Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Script Php per il backup di un database
#1
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

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ò Wink
Cita messaggio
#2
Grazie InsanuS!
Cita messaggio
#3
Complimenti e grazie per la condivisione... Wink
Cita messaggio
#4
InsanuS Ha scritto:p.s. DIAMO UNA SVECCHIATA A QUESTA SEZIONE DI PROGRAMMAZIONE ! che mi piange il cuore sennò Wink
Infatti, ma ci devono pensare i programmatori, non è una sezione per tutti!
Cita messaggio
#5
Grazie, si in effetti la trascuro anche io questa sezione.
[Immagine: 1xtz7.png]
Cita messaggio
#6
Vedrò di rendere questa sezione più VIVA possibile Wink
Cita messaggio
#7
A proposito leggi l'email ho ricordato che dovevo inviarti una cosa...
[Immagine: 1xtz7.png]
Cita messaggio


Vai al forum:


Utenti che stanno guardando questa discussione: 1 Ospite(i)