• User Attivo

    Backup automatico database

    Salve, utlimamente non sono molto fortunata in questo sito. Forse faccio domande troppo banali ed è per questo che nessuno mi risponde... :bho:
    Anche se poi, alla fine, mi sono ingegnata ed ho trovato le risposte da sola 😉
    Ma stavolta la ricerca l'ho fatta e non sono riuscita a trovare una soluzione. Dovrei fare il backup automatico di un database. Lo so che se vado su phpmyadmin posso benissimo utilizzare il comando importa/esporta. Ma devo utilizzare qualcosa di automatico, che, per esempio, adun un certo orario parta in automatico direttamente dal sito e faccia le copie in modo "silenzioso" e senza intervento dell'operatore.
    E' possibile fare una cosa simile? E se non è possibile, cosa poteri fare in alternativa?


  • User Attivo

    Uno script che esegua silenziosamente il backup temporizzato dei dati non è proprio il massimo, questo compito dovrebbe essere lasciato fare a programmi specializzati installati sui server, per impedire inutili sprechi elaborativi.
    In php è possibile creare uno script che si avvia e non "muore" mai, almeno fino a quando il server non si riavvia o decide di "abbattere" l'esecuzione (script time limit).
    Esempio, non funziona se il server usa il "safe_mode", per evitare crash.
    [php]
    ignore_user_abort(); // funzione per far continuare l'esecuzione dello script anche dopo la chiusura della pagina
    set_time_limit(0); // funzione per far continuare lo script all'infinito
    $interval = 60*15; // ogni 15 minuti...
    do
    {
    $a = 10 + 5; // funzioni da svolgere ogni 15 minuti
    sleep($interval); // funzione per attendere 15 minuti dopo l'intervento
    }
    while(true);
    [/php]In alternativa è possibile inserire un controllo nella pagina principale del sito, in modo che, quando un utente la visita, avvia il backup se è stata superata l'ora prefissata.
    La cosa positiva è che viene eliminata la parte elaborativa che potrebbe rallentare il server, mentre negativamente, è possibile che nessun visitatore entri nel sito e non avviene alcun backup.
    Comunque, il backup di MySQL tramite PHP può essere fatto in due modi:
    1: Query SQL per ogni tabella
    [php]
    // Precede apertura connessione al server sql
    $query = "SELECT * INTO OUTFILE 'backup.sql' FROM tabella";
    $result = mysql_query($query);
    //Restore: LOAD DATA INFILE 'backup.sql' INTO TABLE tabella
    [/php]2: Dump di sistema
    [php]
    $command = "mysqldump --opt -h host -u user -p password nome_db | gzip > backup.sql";
    system($command);
    [/php]Ciao!


  • User Attivo

    Ho provato entrambi i codici che hai inserito. Li eseguo e non mi viene restituito nessun messaggio di errore. Ma il file backup.sql dove viene salvato?

    Guarda che l'offerta del caffé è sempre valida. Ma visto che mi risolvi sempre i problemi potrei offrirti pure un pranzo :smile5:


  • User Attivo

    Come non detto, il file l'ho trovato. O meglio gli ho dato un percorso specifico e lo script me l'ha salvato nella cartella esatta.
    Solo che se lo eseguo una seconda volta mi dice che il file già esiste. Devo cancellarlo prima di eseguire lo script? O forse è meglio rinominarlo, tipo backup_gg_mm_aaaa_hh_mm.sql?
    In entrambi i casi, non conosco i comandi per eseguire queste operazioni :mmm:


  • User Attivo

    Si, i due metodi di backup creano sempre un file con lo stesso nome, ma nulla ti vieta di rinominarlo "backup_gg_mm_aaaa_hh_mm.sql" utilizzando la funzione date().

    Es.
    [php]
    $nome = "backup_" . date("d-m-Y_H-i-s") . ".sql";
    [/php]

    Ciao!


  • User Attivo

    Si, così è perfetto, lo creo direttamente con la data nel nome.

    Mille grazie sempre :yuppi:


  • User Attivo

    Prego! 😉

    :ciauz:


  • User Newbie

    Scusatemi, so che questa conversazione è vecchia, ma non riesco a salvare il backup del mio db.. nella mia funzione system() metto anche il secondo parametro, che contiene l'ultimo comando del programma se questo è stato eseguito, false altrimenti. mi restituisce 1, ne deduco quindi che in qualche modo funziona, però non riesco a trovare il file, neanche se metto un percorso specifico.. ho paura che sia dovuto al fatto che il web server che uso è quello dell'università, non è che me lo salva lì da qualche parte?? (io ho accesso solo ai dati relativi al mio dominio..)
    grazie mille


  • User Attivo

    Lavorando su un server dove non si hanno i pieni privilegi, forse il file di backup non può essere scritto nella cartella scelta perchè c'è un vincolo di scrittura, oppure la chiamata di sistema al processo "mysqldump" non viene eseguita perchè il server non conosce la path completa del programma.
    Se non mi sbaglio con la funzione phpinfo() deve comparire sotto la voce del processo su PATH di Apache Environment.

    Ciao!


  • User Newbie

    Innanzitutto ti ringrazio molto della risposta.
    Purtroppo non so neanche che tipo di server utilizza la mia università, e tantomeno so la path per arrivare al programma dato che mysql è appunto sul server dell'università..
    Credo che mi toccherà scrivere uno script per farmi il backup da sola..
    grazie mille!