disign | PHP: script che fa il backup di un db e lo invia per mail | a digital sign for a best design!
A digital sign for a best design

Articolo stampato da http://disign.improntedigitali.it/php-script-che-fa-il-backup-di-un-db-e-lo-invia-per-mail-261-2-1.html

© Luca Frassineti

Programmazione 3.873 visualizzazioni

PHP: script che fa il backup di un db e lo invia per mail

27/10/2011

Stanchi di fare backup manuali del vostro database attraverso strumenti quali PhpMyAdmin o altri?

Con un semplice script PHP, basta impostare i parametri di configurazione all'inizio del codice, caricarlo sul vostro server e ogni volta che volete un backup lo richiamate via web e riceverete in mail l'sql corrispondente!

Chi ha accesso al crontab del server può inserirlo come esecuzione automatica all'ora desiderata del giorno desiderato.

 

Ecco il codice con relativi commenti di spiegazione:

 

// silenziamo notice e warning
error_reporting(E_ALL);
 
// Configurazione (in corsivo i parametri da personalizzare)
$dbname = 'nome_del_db_da_backuppare';
mysql_connect('localhost', 'nome_utente_db', 'password_utente_db');
mysql_select_db($dbname);
$MailTo = 'mail_a_cui_ricevere_sql';
$from ='mail_mittente';
// fine configurazione

 
// Intestazioni
$uscita = '

-- SQL Dump
--
-- Generato: '. date('r') .'
-- Versione MySQL: ' . mysql_get_server_info() . '
-- Versione PHP: '. phpversion() .'
 
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
 
--
-- Database: `' . $dbname . '`
--';
 
// Inizializzo le variabili in cui memorizzare i dati estratti
$dump = $uscita;
$uscita = '';
 
// Trovo le tabelle
$tabelle = mysql_query("SHOW TABLE STATUS");
$i = 0;
while ($tabella = mysql_fetch_assoc($tabelle)) {
 
    $tabellaName = $tabella['Name'];
 
    $tmp = mysql_query("SHOW CREATE TABLE `$tabellaName`");
 
    // Inserisco istruzione create
    $create = mysql_fetch_assoc($tmp);
    $uscita .= "\n\n--\n-- Struttura tabella: `$tabellaName`\n--\n\n".$create['Create Table'].' ;';
 
    // Libero risultati
    mysql_free_result($tmp);
    unset($tmp);
 
    // Inserisco risultati in variabile
    $dump .= $uscita;
    $uscita = '';
 
    // Righe
    $tmp = mysql_query("SHOW COLUMNS FROM `$tabellaName`");
    $rows = array();
    while ($row = mysql_fetch_assoc($tmp)) {
        $rows[] = $row['Field'];
    }
 
    // Libero risultati
    mysql_free_result($tmp);
    unset($tmp, $row);
 
    // Recupero i dati
    $tmp = mysql_query("SELECT * FROM `$tabellaName`");
    $count = mysql_num_rows($tmp);
 
    if ($count > 0) {
 
        $uscita .= "\n\n--\n-- Dati tabella: `$tabellaName`\n--";
        $uscita .= "\nINSERT INTO `$tabellaName` (`".implode('`, `', $rows)."`) VALUES ";
 
        $i = 1;
        // Trovo i dati
        while ($entry = mysql_fetch_assoc($tmp)) {
 
            // Creao i valori
            $uscita .= "\n(";
            $tmp2 = array();
 
            foreach ($rows as $row) {
                $tmp2[] = "'" . mysql_real_escape_string($entry[$row]) . "'";
            }
 
            $uscita .= implode(', ', $tmp2);
            $uscita .= $i++ === $count ? ');' : '),';
 
            // Inserisco risultati in variabile
            $dump .= $uscita;
            $uscita = '';
        }
 
        // Libero risultati
        mysql_free_result($tmp);
        unset($tmp, $tmp2, $i, $count, $entry);
 
    }
 
    // Incremento contatore
    $i++;
}
 
 

// Invio mail
$MailSubject = "BACKUP DATABASE " . $dbname . ' ' .date('Y-m-d_H-i');
$MailHeader = "From: " . $from . "\nX-Mailer: PHP/\nReply-To:" . $from . "\nReturn-Path:" . $from . "\n";
$MailBody = $dump;
mail($MailTo, $MailSubject, $MailBody, $MailHeader); 

echo "

Il backup del database  $dbname è stato inviato a $MailTo

";

 

DB

Invia una domanda o un commento sull'articolo

I campi obbligatori sono segnalati *

*

*



 




Questo sito è totalmente privo di pubblicità, se volete sostenere questa inziativa, potete scegliere di fare una piccola donazione libera:



© 2009 - 2025 Impronte digitali di Luca Frassineti. Tutti i diritti riservati.