Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Script backup mysql

  1. #1
    Utente di HTML.it L'avatar di gppjuse
    Registrato dal
    Apr 2002
    Messaggi
    238

    Script backup mysql

    Salve,

    sto utilizzando questo script per eseguire il backup di un db MySql:

    <%
    server.ScriptTimeout = 300 '5 minutiinizioTempo = 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 ' ***************************** LINEA 85 *************************
    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
    %>


    Purtroppo mi viene rilasciato un errore alla linea 85 (che ho indicato nello script):

    Microsoft VBScript runtime error '800a000d'
    Type mismatch
    /icaro/webcom/backup/backup.asp, line 85

    In particolare il problema credo sia nell'espressione
    Rs2(1). Qualcuno sa aiutarmi? Grazie.
    Ultima modifica di gppjuse; 02-01-2014 a 08:55
    Solo chi non osa...non sbaglia!

  2. #2
    se prima della riga incriminata ti fai stampare il contenuto di rs2(1) cosa ottieni?

  3. #3
    Utente di HTML.it L'avatar di gppjuse
    Registrato dal
    Apr 2002
    Messaggi
    238
    Lo stesso errore...

    Mi sono accorto che se alla riga incriminata tolgo la parta &";"& VbCrLf & VbCrLf non mi dà più l'errore, ma credo che il codice sia giusto, no?
    Ultima modifica di gppjuse; 02-01-2014 a 11:29
    Solo chi non osa...non sbaglia!

  4. #4
    i vari VbCrLf a cosa servono? forse basta il ";" se devi solo separare le istruzioni

  5. #5
    oppure prova con

    create_tables = CStr(Rs2(1)) & ";" & VbCrLf & VbCrLf

  6. #6
    Utente di HTML.it L'avatar di gppjuse
    Registrato dal
    Apr 2002
    Messaggi
    238
    Perfetto con CStr(Rs2(1)) & ";" & VbCrLf & VbCrLf abbiamo fatto un passo avanti e superato il punto critico. Ho fatto una stampa del recordset e mi viene fuori:

    ????????????????????????????????????????????†????? ?????4???†????????????4???†????????????4???†?????? ?????????????????????????????????????????????????? ????????4???†????????????4???†??????†????????????? ???????4???†?????????????????????????????????????? ?????????????????????????????????????????????????? ?????†?????????????4???†?????????????????????????? ???????????????†????????????????????‹???????????

    che non so se è normale.

    Scendendo con lo script adesso mi si ferma su un'altra riga

    '+-----------------------+
    '|--- 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) '***************** RIGA ERRORE **********************

    che mi restituisce l'errore

    Microsoft OLE DB Provider for ODBC Drivers error '80004005'
    [MySQL][ODBC 3.51 Driver][mysqld-4.1.25-standard-log]Access denied for user 'Administrator'@'%' (using password: YES)

    E' strano perchè già la connessione
    objConn l'ho già usata per fare altre cose all'interno dello script e funzionava....


    Solo chi non osa...non sbaglia!

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.