HwNL Community - Il Forum Informatico
Script Php per il backup di un database - Versione stampabile

+- HwNL Community - Il Forum Informatico (https://forum.hwnl.it)
+-- Forum: Informatica (https://forum.hwnl.it/forum-27.html)
+--- Forum: Programmazione (https://forum.hwnl.it/forum-18.html)
+--- Discussione: Script Php per il backup di un database (/thread-1345.html)



RE: Script Php per il backup di un database - InsanuS - 10-25-2012

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


RE: Script Php per il backup di un database - beva - 10-25-2012

Grazie InsanuS!


RE: Script Php per il backup di un database - ptrc_000 - 10-25-2012

Complimenti e grazie per la condivisione... Wink


RE: Script Php per il backup di un database - Fabianator - 10-26-2012

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!


RE: Script Php per il backup di un database - Admin - 10-26-2012

Grazie, si in effetti la trascuro anche io questa sezione.


RE: Script Php per il backup di un database - InsanuS - 10-26-2012

Vedrò di rendere questa sezione più VIVA possibile Wink


RE: Script Php per il backup di un database - Admin - 10-26-2012

A proposito leggi l'email ho ricordato che dovevo inviarti una cosa...