aiuto con mysqldump

Silen

Utente Attivo
24 Nov 2008
64
0
0
silen.netsons.org
salve!
ho provato questo interessantissimo script per fare i backup del db in modo automatico senza andare in PhpMyAdmin
ma mi riporta questo errore
Codice:
Warning: filesize() [function.filesize]: stat failed for /Backups/2009-06-20_18:31.sql in /home/silennet/public_html/Backups/backup.php on line 13
Backup di silennet_silen eseguito con successo.
e mi manda persino la mail, però di file .sql nella directory non c'è nemmeno l'ombra :crying:
ovviamente dalla riga 13 in poi c'è questo
PHP:
$dimensione=filesize($backup);
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;

un aiutino? :book:

credo che il mio hosting permetta l'esecuzione del dump, perché quello che avevo prima come hostname dava "localhost" mentre questo che ho adesso mi da questo indirizzo esterno "mysql.netsons.com" dico giusto o una cavolata? :p comunque l'host precedente mi diceva proprio che la funzione non era consentita nell'errore, mentre ora no

mi sciogliete qualche dubbio?:confused:
 
ciao
prova a mettere prima di filesize

file_exists($backup)

facendo un if

PHP:
if(file_exists($backup)){
//quello che devi fare
}else{
echo "il file non esiste";
}

così ti accorgi se hai creato o no il file, se no l'errore non è in filesize ma altrove
 
@borgo_italia
grazie dell'aiuto, avevo già il sospetto che non creasse il file, infatti
mi manda persino la mail, però di file .sql nella directory non c'è nemmeno l'ombra :crying:
ora ne ho la certezza, perché anche dice di aver spedito la mail restituisce l'output "il file non esiste"
quindi? cosa devo fare per farglielo creare? :confused: io ho seguito alla lettera quello script :book:

ho modificato il codice così intanto
PHP:
<?php
$hostname="nomehosting";		//Nome Host
$username="mionomeuser";		//Nome Utente
$password="miapassword";		//Password Database
$database="miodatabase";		//Nome Database

$gg=date("Y-m-d");
$hh=date("H:i");
$backup="/Backups/".$gg."_".$hh.".sql";

system("mysqldump --user=$username --password=$password --host=$hostname $database > $backup", $res);

if (file_exists($backup)) {
unlink($backup);
$dimensione=filesize($backup);
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;
}
$email="mioindirizzoemail";
$headers="FROM: $email\n";
$headers.="Return-Path: $email\n";
ini_set("sendmail_from", $email);
$oggetto="Backup eseguito!";
$testo = "Backup di ".$database." eseguito con successo.\n\n";
$testo.="Sql: ".$res."\n";
$testo.="Percorso: ".$backup."\n";
$testo.="Dimensione: ".$dimensione."\n";
$testo.="Eseguito il: ".date("l d F Y @ H:i")."";
mail($email, $oggetto , $testo, $headers);
echo "Backup di ".$database." eseguito con successo.";
} else {
echo "Il file non esiste!";
}
?>
 
Ultima modifica:
ciao, scusa una cosa, nel tuo scrip non vedo la riga

system(
"mysqldump --user=$user --password=$password --host=$host $database > $bk",$res
);
 
hai ragione borgo_italia :o
ora ho postato il codice completo della pagina backup.php :D (ovviamente omettendo i dati "sensibili") e aggiungo che la cartella Backup si trova nella root dello spazio FTP, non so se può essere un'informazione utile
 
Ultima modifica:
eccomi qui, scusate ma il processo di santificazione andava per le lunghe :)
Per poter eseguire lo script è necessario che la configurazione del proprio ambiente php supporti l'utilizzo del comando system, diversamente lo script non verrà eseguito.
 
scusa la domanda niubba ma, posso saperlo con un comando tipo phpinfo() :confused:
e quest'errore
PHP:
Warning: filesize() [function.filesize]: stat failed for /Backups/2009-06-20_18:31.sql in /home/silennet/public_html/Backups/backup.php on line 13
è relativo o non c'entra nulla?
ultima domanda, poi mi sotterro :p
mi potreste indicare uno script alternativo da studiarmi per automatizzare i backups? :book:
grazie ancora a tutti :fonzie:
 
Ultima modifica:
ciao
scusa la mia ignoranza ,eliox, vampira permettendo, potrà darti una risposta, mentre io ti faccio una domanda:
ti da errorre alla riga
$dimensione=filesize($backup);
giusto?
ma come fa a prendere la dimensione di un file che hai eliminato
unlink($backup);
?
 
ciao
come il solito spera in sant'eliox, come detto non sono un expertissimo, l'unico dubbio che ho è che prima cancello il file (unlike), poi lo "misuro".
se c'e comunque a qualcosa dovrebbe servire:confused:
se stai facendo delle prove (non su veri files) prova a commentarlo e vedi che succede, oppure a metterlo dopo il filesize
tentar (su file fasulli) non nuoce
 
intanto grazie mille del suggerimento borgo_italia :fonzie:
spostando quel comando dopo il filesize l'errore è sparito :tifoso: ed è già qualcosa :) ora il codice dello script si presenta così
PHP:
<?php
$hostname="nomehosting";		//Nome Host
$username="mionomeuser";		//Nome Utente
$password="miapassword";		//Password Database
$database="miodatabase";		//Nome Database

$gg=date("Y-m-d");
$hh=date("H:i");
$backup="../Backups/".$gg."_".$hh.".sql";

system("mysqldump --user=$username --password=$password --host=$hostname $database > $backup", $res);

if (file_exists($backup)) {
$dimensione=filesize($backup);
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;
unlink($backup);
}
$email="mioindirizzoemail";
$headers="FROM: $email\n";
$headers.="Return-Path: $email\n";
ini_set("sendmail_from", $email);
$oggetto="Backup eseguito!";
$testo = "Backup di ".$database." eseguito con successo.\n\n";
$testo.="Sql: ".$res."\n";
$testo.="Percorso: ".$backup."\n";
$testo.="Dimensione: ".$dimensione."\n";
$testo.="Eseguito il: ".date("l d F Y @ H:i")."";
mail($email, $oggetto , $testo, $headers);
echo "Backup di ".$database." eseguito con successo.";
} else {
echo "Il file non esiste!";
}
?>
a questo punto, quando lancio il batch, mi riporta soltanto che il file non esiste, quindi attendo la prossima apparizione del Sant'Eliox :D

se poi qualcuno nel frattempo mi suggerisce come fare a sapere se il comando dump è abilitato o no,
oppure anche un metodo alternativo per automatizzare il backup, gliene sarei davvero riconoscente :love:
 
Ultima modifica:
Sapere l'elenco delle funzioni disabilitate è semplice. Basta scrivere uno script così:

PHP:
<?php

echo ini_get('disable_functions');

?>

Ed è moooolto probabile che trovi la funzione system disabilitata (e non solo quella)...
 
grazie mille millissimissimo Trogo :fonzie:
l'ho provata subito ed è venuto fuori questo
PHP:
show_source, passthru, exec, proc_open, allow_url_fopen
quindi mi pare che system sia abilitata, o sbaglio? :confused:
 
Si è esatto, direi che è abilitata. A questo punto potresti provare a vedere se il comando ritorna un errore di qualche tipo. Prova con uno script così:

PHP:
<?php

$stdout_err = system("mysqldump 2>&1", $res);  

echo "<div>Codice di ritorno: " . $res . "</div>";
echo "<div>" . $stdout_err . "</div>";

?>

e vediamo che dice...
 
ok Trogo, ti ringrazio di nuovo :) ho fatto, e questo è il risultato
PHP:
Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] For more options, use mysqldump --help
Codice di ritorno: 1
For more options, use mysqldump --help
solo che io non ho la più pallida idea di che significhi, spero ti sia di aiuto :)
 
Sicuramente è di aiuto nel senso che così abbiamo testato la possibilità di utilizzare mysqldump. Aggiungere questo 2>&1 dopo il comando è servito a redirezionare lo stderr sullo sdtout e vedere il messaggio che ritorna.
Visto che ha ritornato l'help di mysqldump, vuol dire che puoi lanciare l'eseguibile da PHP.

Guardando il codice ho notato questo:
PHP:
$backup="/Backups/".$gg."_".$hh.".sql";

Implica un path assoluto e mi sembra molto strano che su un sito in hosting tu abbia accesso ad una cartella sotto radice. E' possibile che il problema sia il path. Prova ad usare solo il nome del file:
PHP:
$backup = $gg . "_" . $hh . ".sql";
 
Trogo hai ragionissima!!!!!!!!! :fonzie:
impuntandomi a cercare di capire il perché dell'errore che mi dava sulla dimensione,
non ho considerato il percorso di salvataggio del backup, sono proprio una tonna :p

adesso ho aggiunto i "puntini" per far diventare il path relativo e finalmente funziona senza errori:
lo script viene eseguito e il file di backup uppato nella cartella, e contestualmente mi viene inotrata la mail

però ci dev'essere qualcos'altro che non va, perché il backup fatto con PHPMyAdmin è di quasi cinque mega,
mentre quello che viene fuori con questo batch è due mega e mezzo abbondanti; mi sono detta che magari
era dovuto al metodo di backup diverso, così ho provato a scaricarlo dal server ftp per vedere se mancava
qualche tabella, ma non me lo fa downloadare, dice che non è stato possibile aprire il file in scrittura, anche
se la cartella ha i permessi impostati a 755, e nemmeno se li cambio a 777 :confused: però, sempre tramite ftp posso
aprirlo direttamente dal server e visualizzarlo, e pare proprio che il backup sia completo

poi ho una domanda: a che serve la variabile $res? nella mail mi riporta come valore sempre zero, è giusto così?

intanto ringrazio borgo_italia e Trogo per l'aiuto
poi ho corretto il codice con le ultime modifiche
e scusate se le mie domande sono stupide ^^''
 

Discussioni simili