Script per backup DB MySQL automatizzato che non va.

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Ciao a tutti,

girovagando per la rete ho trovato un interessante script per il backup di DB Mysql. Dopo averlo correttamente configurato e lanciato in locale per vedere come funzionava, mi sono accorto che mi restituisce solamente la struttura del DB, e non il dump dei dati.

Questo è lo script:

PHP:
<?php
$email = "mail dove ricevere il report";
$host="Host dove c'è il DB"; 
$user="Nome Utente"; 
$password="Password";
$database="Nome del DB";
 
$bk = "./backup/" . date("d.m.Y") . ".sql";

if ( file_exists($bk) ) unlink($bk);
system(
"mysqldump --user=$user --password=$password --host=$host $database > $bk",$res
);
$dimensione = filesize($bk);
switch ($dimensione) {
case ($dimensione>=1048576): 
$dimensione = round($dimensione/1048576) . " MB"; break;
case ($dimensione>=1024): 
$dimensione = round($dimensione/1024) . " KB"; 
break;
default: $dimensione = $dimensione . " bytes"; break;
}

$testo = "Backup per il database " . $database . " eseguito.\n\n";
$testo .= "Sql: " . $res . "\n\n";
$testo .= "Percorso: " . $bk . "\n\n";
$testo .= "Dimensione: " . $dimensione . "\n\n";
$testo .= "Tempo di esecuzione: " . date(" F d h:ia") . "\n\n";
mail($email, "Database Backup" , $testo, "From: Website <>"); 
?>

Come faccio a fare inserire anche i dati contenuti nelle varie tabelle?
 
sei sicuro che il tuo server supporti l'esecuzione di istruzioni da riga di comando da codice PHP?
 
credo di si, perchè con lo script attuale riesco ad estrarre la struttura delle tabelle ma non i dati in esse contenute
 
Ho apportato una piccola modifica. Ho aggiunto anche l'ora al nome del file

PHP:
<?php

$bk = "./backup/" . date("d.m.Y-G:i:s") . ".sql.txt";
if ( file_exists($bk) ) unlink($bk);
system(
"mysqldump --user=$user --password=$password --host=$host $database > $bk",$res
);
$dimensione = filesize($bk);
switch ($dimensione) {
case ($dimensione>=1048576): 
$dimensione = round($dimensione/1048576) . " MB"; break;
case ($dimensione>=1024): 
$dimensione = round($dimensione/1024) . " KB"; 
break;
default: $dimensione = $dimensione . " bytes"; break;
}

$testo = "Backup per il database " . $database . " eseguito.\n\n";
$testo .= "Sql: " . $res . "\n\n";
$testo .= "Percorso: " . $bk . "\n\n";
$testo .= "Dimensione: " . $dimensione . "\n\n";
$testo .= "Tempo di esecuzione: " . date(" F d h:ia") . "\n\n";
mail($email, "Database Backup" , $testo, "From: Website <>"); 
print("<a href='".$bk."'>SCARICA IL BACKUP DAL SERVER</a>");
?>

ed ho anche inserito una tabellina in cui mi genera un elenco dei file di backup:

PHP:
<?php

$cartella = opendir('./backup/');
print("<table class='tabella'>");
print("<thead><tr><th class='cella_intestazione'>File</th><th class='cella_intestazione'>Scarica</th></tr></thead>");
while ($file = readdir($cartella)) {
$file_array[] = $file;
}

foreach ($file_array as $file) {
# se il file inizia con .. lo tralascio
if ( $file == ".." || $file == ".") {
continue;
}
#trovo i file e creo il link
print("<tr>");
$e=substr(strrchr($file, "."), 0); // azzero l'estensione
$a=""; //sostituisco lo spazio vuoto con il relativo codice html
$b=" ";
$nome1=ereg_replace($e, $a, $file); // sostituisco codice 1
$nome=ereg_replace("_", "$b", $nome1); //sostituisco  codice 2. Sta parte qui l'ho fatta un pò male.... dovresti rivederla e farla meglio, ho fatto un paio di passaggi per niente....
print("<td class='cella_corpo'>Backup".$nome."</td>");
print("<td class='cella_corpo_2'><a href='$file' title='$nome'><img src='./img/pulsanti/pdf.png' alt='scarica' title='scarica' /></a></td>"); //questo crea il link
print("</tr>");
}
print("</table>");
?>

e qua non so come ordinare in base alla cella del nome del file.
 
oook, questo sono riuscito a risolverlo piuttosto comodamente. Ora mi rimane solamente l'altro problema: inserire anche il dump delle tabelle nel mio file di backup del DB. Questo è il file modificato con la creazione del file .ZIP e la cancellazione del file di origine:

PHP:
<?php

 
$bk = "./backup/Data".date("d.m.Y")."Ora".date("G.i").".sql";

if ( file_exists($bk) ) unlink($bk);
system("mysqldump --user=$user --password=$password --host=$host $database > $bk",$res);
$dimensione = filesize($bk);
switch ($dimensione) {
case ($dimensione>=1048576): 
$dimensione = round($dimensione/1048576) . " MB"; break;
case ($dimensione>=1024): 
$dimensione = round($dimensione/1024) . " KB"; 
break;
default: $dimensione = $dimensione . " bytes"; break;
}
$backupFile="./backup/Data".date("d.m.Y")."Ora".date("G.i").".zip";

//Se esiste già, lo cancello
if (file_exists($backupFile)) @unlink($backupFile);
//Includo la libreria e genero l'oggetto zip
require_once('./script/pclzip.lib.php');
$archive = new PclZip($backupFile);
//Una lista di nomi di files da comprimere
$listOfFilesToCompress=$bk;
//Aggiungo i files all'archivio
$v_list = $archive->add($listOfFilesToCompress);
if ($v_list == 0) {
die("Error : ".$archive->errorInfo(true));
}
$testo = "Backup per il database " . $database . " eseguito.\n\n";
$testo .= "Sql: " . $res . "\n\n";
$testo .= "Percorso: " . $bk . "\n\n";
$testo .= "Dimensione: " . $dimensione . "\n\n";
$testo .= "Tempo di esecuzione: " . date(" F d h:ia") . "\n\n";
mail($email, "Database Backup" , $testo, "From: Website <>"); 
unlink("./backup/Data".date("d.m.Y")."Ora".date("G.i").".sql");
?>

Qualcuno mi sa dare una mano?
 
L'SQL generato dal comando che esegui ricrea sia le tabelle che i dati che le popolano.
 
Riprendo questa discussione poiché riguarda il mio problema. Ho utilizzato lo stesso script per crearmi un backup del mio database ma io ottengo un file vuoto anziché il file con il dump del mio database, c'è qualcuno che sa spiegarmi il perché?
 

Discussioni simili