vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 
zurück
Rubrik: Datenbanken · SQL-Server   |   VB-Versionen: VB617.05.04
MySQL Backup erstellen

Backup-Funktion zum Sichern einer MySQL Datenbank in eine Textdatei

Autor:   Thomas PagelBewertung:     [ Jetzt bewerten ]Views:  19.963 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Diese Tipp zeigt, wie sich ein Dump einer MySQL-Datenbank erstellen und als Backup in einer Textdatei sichern lässt. Die Textdatei ist hierbei identisch mit der Textdatei, die PHPMyAdmin anlegt und kann somit von PHPMyAdmin auch ausgeführt werden.

Der Code wurde unter WindowsXP und VB6 mit einer ODBC-Verbindung getestet. Damit die "MakeBackupNow"-Funktion eine Verbindung zur Datenbank bekommt, muss ein MyODBC-Treiber installiert sein, der sich zur Datenbank verbindet. Die Code funktioniert mit jeder MySQL-Version ab 3.23.03.

Public Sub MakeBackupNow(ODBCBaseName As String, ByVal sBackupFile As String)
  On Error Resume Next
 
  Dim oConn As ADODB.Connection
  Dim BaseMakeBackup As Recordset
  Dim BaseMakeBackupCreate As Recordset
  Dim DataBaseTables As Recordset
 
  Dim prevIndex As String
  Dim f As Integer
  Dim m As Integer
  Dim d As Integer
  Dim ArraCountFeld(99)
  Dim ArraCountWert(99)
  Dim ZeilenString As String
  Dim CheckPrimZeile As String
  Dim CheckKeyZeile As String
  Dim ZeilenStringCreate As String
  Dim TabellenName As String
  Dim DatenString As String
  Dim DateiNR As Integer
 
  ' Backup-Datei öffnen
  Open sBackupFile For Output As DateiNR
 
  ' Verbindung zur MySQL-Datenbank herstellen
  Set oConn = New Connection
  Set BaseMakeBackup = New ADODB.Recordset
  Set BaseMakeBackupCreate = New ADODB.Recordset
  Set DataBaseTables = New ADODB.Recordset
  oConn.Open "Provider=MSDASQL;DSN=" & ODBCBaseName
 
  ' alle Tabellen ermitteln
  TabellenName = ""
  With DataBaseTables
    .Open "SHOW TABLE STATUS", oConn
    Do While Not .EOF
      TabellenName = .Fields.Item("Name").Value
      CheckPrimZeile = ""
 
      ' Informationen der Felder einer Tabelle abfragen
      With BaseMakeBackupCreate
        .Open "SHOW FIELDS FROM " & TabellenName, oConn
 
        ' Datei-Information
        Print #DateiNR, ""
        Print #DateiNR, "#"
        Print #DateiNR, "# Tabellenstruktur für Tabelle " & TabellenName & ""
        Print #DateiNR, "#"
        Print #DateiNR, ""
 
 
        ' SQL-Anweisungen zur Erstellung der jeweiligen
        ' Tabelle in die Textdatei schreiben
        ZeilenStringCreate = "CREATE TABLE " & TabellenName & " ("
        Print #DateiNR, ZeilenStringCreate
 
        Do While Not .EOF
          ZeilenStringCreate = "  " & .Fields.Item(0).Value & " " & .Fields.Item(1).Value
          If .Fields.Item(2).Value <> "YES" Then
            ZeilenStringCreate = ZeilenStringCreate & " NOT NULL"
          End If
 
          If .Fields.Item(3).Value = "PRI" Then
            CheckPrimZeile = "  PRIMARY KEY  (" & .Fields.Item(0).Value & ")"
          End If
 
          If .Fields.Item(3).Value = "MUL" Then
            CheckKeyZeile = "Wahr"
          End If
 
          If .Fields.Item(4).Value <> "" Then
            ZeilenStringCreate = ZeilenStringCreate & " default '" & .Fields.Item(4).Value & "'"
          End If
 
          If .Fields.Item(5).Value = "auto_increment" Then
            ZeilenStringCreate = ZeilenStringCreate & " auto_increment"
          End If
 
          ' nächstes Feld
           .MoveNext
 
          If .EOF = True Then
            If CheckPrimZeile <> "" Then
              ZeilenStringCreate = ZeilenStringCreate & ","
            Else
              If CheckKeyZeile <> "" Then
                ZeilenStringCreate = ZeilenStringCreate & ","
              End If
            End If
          Else
            ZeilenStringCreate = ZeilenStringCreate & ","
          End If
 
          Print #DateiNR, ZeilenStringCreate
        Loop
 
        If CheckKeyZeile <> "" Then
          If CheckPrimZeile <> "" Then CheckPrimZeile = CheckPrimZeile & ","
        End If
 
        If CheckPrimZeile <> "" Then Print #DateiNR, CheckPrimZeile
        .Close
 
        ' alle Indexes ermitteln
        .Open "SHOW KEYS FROM " & TabellenName, oConn
        f = 0
        prevIndex = ""
        CheckKeyZeile = ""
        Do While Not .EOF
          If .Fields.Item("Key_name").Value <> prevIndex Then
            ArraCountWert(f) = .Fields.Item("Column_name").Value
            ArraCountFeld(f) = .Fields.Item("Key_name").Value
          Else
            ArraCountWert(f) = ArraCountWert(f) & "," & .Fields.Item("Column_name").Value
          End If
          prevIndex = .Fields.Item("Key_name").Value
 
          ' zum nächsten Index
          .MoveNext
 
          If .EOF = False Then
            If .Fields.Item("Key_name").Value <> prevIndex Then f = f + 1
          End If
        Loop
 
        ' Indexes in BackUp-Datei schreiben
        For m = 0 To f
          If Not ArraCountFeld(m) = "PRIMARY" Then
            If m < f Then
              Print #DateiNR, "  KEY " & ArraCountFeld(m) & " (" & ArraCountWert(m) & "),"
            Else
              Print #DateiNR, "  KEY " & ArraCountFeld(m) & " (" & ArraCountWert(m) & ")"
            End If
          End If
        Next m
        .Close
 
        ZeilenStringCreate = ") TYPE=MyISAM;"
        Print #DateiNR, ZeilenStringCreate
      End With
 
      ' SQL-Anweisungen zur Speichern der Datensätzen der
      ' jeweiligen Tabelle in die Textdatei
      With BaseMakeBackup
        .Open "SELECT * FROM " & TabellenName & "", oConn
 
        Print #DateiNR, ""
        Print #DateiNR, "#"
        Print #DateiNR, "# Daten für Tabelle " & TabellenName & ""
        Print #DateiNR, "#"
        Print #DateiNR, ""
 
        Do While Not .EOF
          ZeilenString = "INSERT INTO " & TabellenName & " VALUES ("
          For d = 0 To .Fields.Count - 1
            DatenString = .Fields.Item(d).Value
 
            ' Currency-Feld: Komma durch Punkt ersetzen
            If .Fields.Item(d).Type = 131 Then
              DatenString = Replace(Format$(DatenString, "0.00"), ",", ".")
            End If
 
            ' Backslash durch Doppel-Backslash ersetzen
            DatenString = Replace(DatenString, "\", "\\")
 
            ' Hochkomma durch Backslash+Hochkomma ersetzen
            DatenString = Replace(DatenString, "'", "\'")
 
            ' CR durch \r\n ersetzen
            DatenString = Replace(DatenString, Chr(13), "\r\n")
 
            ZeilenString = ZeilenString & "'" & DatenString & "', "
          Next d
          ZeilenString = Left(ZeilenString, Len(ZeilenString) - 2) & ");"
          Print #DateiNR, ZeilenString
 
          ' zum nächsten Datensatz
          .MoveNext
        Loop
        .Close
      End With
 
      ' zur nächste Tabelle
      .MoveNext
      Print #DateiNR, "#--------------------------------------------"
    Loop
 
    ' DB-Verbindung schließen
    .Close
  End With
 
  oConn.Close
  Close
End Sub

Der Aufruf der MakeBackupNow-Funktion erfolgt so:

MakeBackupNow "ODBC Name", App.Path & "\backup.sql"

Als ODBC-Name muss der Name der ODBC-Verbindung eingegeben werden.

Der Code wird kontinuierlich weiterentwickelt.
Weitere Features werden sein:

  • Datenbank wiederherstellen
  • einzelen Tabellen sichern und wiederherstellen
  • Tabelleninformationen auslesen
  • Reparieren
  • Datenbank optimieren

Dieser Tipp wurde bereits 19.963 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (4 Beiträge)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen [email protected]  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren [email protected]!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2022 [email protected] Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel