Rubrik: Datenbanken · SQL-Server | VB-Versionen: VB6 | 17.05.04 |
MySQL Backup erstellen Backup-Funktion zum Sichern einer MySQL Datenbank in eine Textdatei | ||
Autor: Thomas Pagel | Bewertung: | Views: 20.519 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | 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