In questo articolo mostreremo un metodo per effettuare il backup di un database MySQL ed il successivo restore in un altro database. Ricordiamo che per questo potente database Open Source e per la sua interazione con le ASP, è disponibile su FreeASP una guida completa in 27 lezioni.
Quando si lavora in remoto, si hanno spesso a disposizione strumenti potenti
di amministrazione di MySQL: generalmente il phpMyAdmin.
A volte, però, sia in locale che in remoto, può nascere l’esigenza di effettuare il backup di un database e di tutti i dati in esso contenuti. Con una serie di script ASP ed utilizzando query standard di MySQL possiamo, ad esempio, schedulare nella notte i backup dei nostri database.
Prerequisiti essenziali per la riuscita delle operazioni sono:
a) avere la possibilità di creare un nuovo database all’interno dello spazio MySQL;
b) disporre di una cartella con i permessi di scrittura (nel nostro esempio faremo riferimento ad essa come 'public') all’interno della quale confluiranno i file di backup prima di essere impiegati per il restore.
Spieghiamo brevemente il funzionamento. Innanzitutto leggiamo le tabelle del database di cui desideriamo effettuare il backup. Una serie di script si preoccuperà di:
- “generare" gli script di creazione di ogni tabella, inserendo il contenuto in un file .txt all’interno di una cartella con i permessi di scrittura: per far ciò sfruttiamo le potenzialità delle query MySQL;
- “produrre" tanti file quante sono le tabelle, con all’interno i dati separati da virgole: anche in questo caso è lo stesso MySQL che si preoccupa di crearli.
A questo punto il backup è eseguito: nella cartella 'public' vi saranno tanti file con estensione .sql quante sono le tabelle del database, ed un file .txt con lo script di creazione di tutte le tabelle.
Il restore esegue l’operazione contraria. Stabilito il nome del nuovo database, lo crea (appoggiandosi, in termini di connessione, al precedente database) ed esegue le query di creazione di tutte le tabelle contenute nel suddetto file .txt.
Successivamente vengono aperti ed eseguiti i file .sql che popoleranno tutte le tabelle.
A conclusione di tutto, i file della cartella 'public' vengono eliminati. Nel caso si volessero rieseguire le operazioni, infatti, le query andrebbero in errore, in quanto troverebbero nella cartella i file già esistenti.
Gli script sono costituiti da tre file. Il file default.asp (Listato 1) contiene un form nel quale indicare il nome del database di cui si desidera effettuare il backup. Inserito il nome, viene eseguito il file backup.asp (Listato 2) del quale è interessante vedere tre query standard di MySQL:
strTables = "SHOW TABLES"
Tramite essa è possibile selezionare i nomi di tutte le tabelle.
strShowCreateTables = "SHOW CREATE TABLE nometabella"
Questa query invece “crea" lo script per la creazione della tabella specificata. Mettendo in un ciclo i risultati della prima query, è possibile creare dinamicamente lo script per tutte le tabelle.
strInFile = ""
strInFile = strInFile &"SELECT * INTO OUTFILE 'percorso assoluto/public/nometabella.sql'"
strInFile = strInFile &"FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED
BY '""' "
strInFile = strInFile &"LINES TERMINATED BY 'n'"
strInFile = strInFile &"FROM nometabella;"
Quest’ultima query, invece, recupera il contenuto completo dalla tabella nometabella e lo inserisce all’interno di un file .sql nella solita cartella 'public', separando i singoli valori con una virgola ed i record con un a capo. Per semplicità e chiarezza il nome del file corrisponde al nome della tabella.
A questo punto si potrà notare la cartella 'public' con tutti i file creati. Se proseguiamo ed indichiamo il nome del database per il restore (lo script ne mostra uno di prova all’interno del modulo), gli stessi file vengono utilizzati e successivamente cancellati.
È sostanzialmente una la query che nel terzo e ultimo file, restore.asp
(Listato 3), merita di essere commentata.
strLoadFile = ""
strLoadFile = strLoadFile &"LOAD DATA INFILE 'percorso assoluto/public/nometabella.sql' INTO TABLE nometabella "
strLoadFile = strLoadFile &"FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '""' "
strLoadFile = strLoadFile &"LINES TERMINATED BY 'n'"
L’istruzione LOAD DATA IN FILE effettua l’operazione contraria dell’istruzione SELECT * INTO OUTFILE vista precedentemente: in pratica legge velocemente all’interno del file indicato ed importa il contenuto nella tabella omonima.
Questo script, adeguatamente commentato in tutti e tre i file di cui si compone, può essere utile nel caso si volesse schedulare il backup di un database MySQL remoto. Agendo sulle stringhe di connessione è possibile leggere in un database per effettuare il backup e scrivere in un altro per il restore (ove permesso).