E se volessimo effettuare il backup solo una volta al giorno, "lanciando" lo script accedendo ad una pagina?
Creiamo una nuova tabella nel db, che chiameremo backup:
codice:
CREATE TABLE 'backup' (
'data_backup' datetime default '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Modifichiamo il nostro script come segue:
Codice PHP:
$db_name = "nome_del_db"; // nome del database
$db_user = "username_db"; // utente database
$db_psw = "password_db"; // password utente database
$to = "pippo@miosito.it"; // indirizzo email a cui viene spedito il backup
$from = "do-not-reply@miosito.it"; // indirizzo email dal quale parte il backup
$dbhost = "localhost"; // indirizzo database
#crea connessione al db
$conn = mysql_connect($dbhost, $db_user, $db_psw);
if (!$conn){
die("Errore: " . mysql_error());
}
mysql_select_db($db_name, $conn);
#verifica se il backup è già stato effettuato nella giornata di oggi
$get_data = "SELECT data_backup FROM backup WHERE data_backup = '" . date("Y-m-d") . "'";
$result = mysql_query($get_data, $conn);
if(mysql_num_rows($result) == 0){ // la data di backup non è uguale a quella corrente
#effettua il backup del database
$backupFile = $db_name . "_" . date("d-m-Y_H-i-s") . '.gz';
$command = "mysqldump --opt -h " . $dbhost . " -u " . $db_user . " -p" . $db_psw . " " . $db_name . " | gzip > backup_files/" . $backupFile . "";
system($command);
require_once 'class.mailer.php';
$mail = new PHPMailer(); //defaults to using php "mail()";
$mail->AddAddress($to, '');
$mail->SetFrom($from, '');
$mail->IsHTML(true);
$mail->Subject = "Backup DB: " . $backupFile;
$mail->Body = "In allegato il backup del database " . $db_name . ".
Email generata in automatico dal sistema, NON RISPONDERE A QUESTA EMAIL";
$mail->AddAttachment("backup_files/" . $backupFile);
$mail->Send();
#aggiorna la data di backup
$update = "UPDATE backup SET data_backup = '" . date("Y-m-d") . "'";
mysql_query($update, $conn);
}
mysql_close($conn);
Basta includere questo script in una pagina php (possibilmente ad inizio pagina) affinchè all'accesso di quella pagina, venga effettuato il backup del database (se l'ultima data di backup è diversa da quella attuale).