Listato 2 - backup.asp

<%
server.ScriptTimeout = 300 '5 minuti

inizioTempo = Timer()

'Recupero il nome del database
db_backup = trim(Request.Form("db_backup"))
if len(db_backup) = 0 then Response.Redirect Request.ServerVariables("HTTP_REFERER")

'Cartella con i permessi di scrittura
folder_file = ("public")

'Path assoluto
path_translated = Request.ServerVariables("path_translated")
pos_path = instrrev(path_translated,"\")
path = left(path_translated, pos_path)

'Path per la scrittura dei file .sql e .txt
write_path = path & folder_file &"\"

'Path corretto per essere usato direttamente nella query sql
write_path = replace(write_path,"\","\\")

call dbConnect(objConn, db_backup)

response.write ("<html>")
response.write ("<title>Backup</title>")
response.write ("<body style=""font-family:verdana;font:12px;"">")

'Scorro le tabelle
Set Rs = Server.CreateObject("ADODB.Recordset")
strTables = "SHOW TABLES;" 'Query standard di MySQL
Rs.Open strTables, objConn
if not rs.EOF then

create_tables = ""
Response.Write ("<strong>Script per la creazione e il backup delle tabelle</strong><br />")

do while not(rs.eof)

'+----------------------------+
'|- SCRIPT CREAZIONE TABELLE -|
'+----------------------------+

Set Rs2 = Server.CreateObject("ADODB.Recordset")
strShowCreateTables = "SHOW CREATE TABLE "& rs(0) &";" 'Query standard di MySQL
Rs2.Open strShowCreateTables, objConn
if not Rs2.EOF then
'Creo il contenuto del file .txt con le istruzioni per la creazione
'delle tabelle del database di restore
if create_tables = "" then
create_tables = Rs2(1) &";"& VbCrLf & VbCrLf
else
create_tables = create_tables & Rs2(1) &";"& VbCrLf & VbCrLf
end if

'Visualizzo l'esito degli script di creazione tabelle
Response.Write ("Tabella '"& Rs(0) &"': <strong>script di creazione eseguito!</strong><br />")
end if
Rs2.Close
set Rs2=nothing

'+-----------------------+
'|--- BACKUP TABELLE ----|
'+-----------------------+

'Effettuo il backup, tabella per tabella, in file .sql separati
'il cui nome prende spunto dal nome della tabella
strInFile = ""
strInFile = strInFile &"SELECT * INTO OUTFILE '"& write_path & rs(0) &".sql' "
strInFile = strInFile &"FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '""' "
strInFile = strInFile &"LINES TERMINATED BY '\n'"
strInFile = strInFile &"FROM "& rs(0) &";" 'Query standard di MySQL
objConn.Execute (strInFile)

'Visualizzo l'esito degli script di backup delle tabelle
Response.Write ("Tabella '"& Rs(0) &"': <strong>backup eseguito!</strong><br /><br />")

rs.movenext
loop
end if
rs.close
set rs = nothing

'Inserisco in un file .txt gli script di creazione delle tabelle (vuote)
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile(server.MapPath(folder_file &"/crea_tabelle.txt"), True)
MyFile.Write (create_tables)
MyFile.Close
Set MyFile = nothing

Response.Write ("<form method=""post"" action=""restore.asp"">")
Response.Write ("<br /><br /><strong>Nome del DB MySQL nel quale effettuare il restore</strong><br />")
Response.Write ("<input type=""text"" name=""db_restore"" value="""& db_backup &"_backup"" style=""font-family:verdana;font:11px;"" size=""30"" />")
Response.Write ("<input type=""hidden"" name=""db_backup value="""& db_backup &""" />")
Response.Write ("<br /><br /><input type=""reset"" name=""annulla"" value=""Annulla"" style=""font-family:verdana;font:11px;"" />&nbsp;<input type=""submit"" name=""submit"" value=""Restore"" style=""font-family:verdana;font:11px;"" />")
Response.Write ("</form>")

response.Write ("<br /><br /><strong>Elenco dei file di backup creati per ogni tabella (a puro titolo informativo)</strong>")
response.Write ("<br />"& ShowFolderList(folder_file))

response.write ("<br />Tempo di esecuzione: "& (timer() - inizioTempo)) &" secondi."

response.write ("</body>")
response.write ("</html>")
call dbDisconnect(objConn, db_backup)

'FUNCTION
'Visualizzazione file in una cartella e link al file stesso
Function ShowFolderList(folderspec)
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(server.MapPath(folderspec))
Set fc = f.Files
cont = 1
For Each f1 in fc
if right(f1.name, 3) = "sql" then
s = s & right("00"& cont,3) &": <a href="""& folder_file &"/"& f1.name &""" target=""_new"">"& f1.name &"</a>&nbsp;&nbsp;&nbsp;"
s = s & VbTab & f1.size/1000000 & " Mb <br />"
cont = cont + 1
end if
Next
ShowFolderList = s
End Function

'SUB
'Apertura connessione database di backup
sub dbConnect(objConn, db_backup)
connectionstring = "DRIVER={MySQL ODBC 3.51 Driver};DATABASE="& db_backup &";SERVER=localhost;UID=root;PASSWORD="
set objConn = server.createObject("ADODB.Connection")
objConn.Open connectionstring
end sub

'Chiusura connessione database di backup
sub dbDisconnect(objConn, db_backup)
objConn.close
set objConn = nothing
end sub
%>