0251 / 590 644 - 0
info@a-coding-project.de

Sicherheitskopien, Wiederherstellung, Export und Import

Jedes seriöse Datenbanksystem bietet Möglichkeiten, Sicherheitskopien zu erzeugen und Daten aus einer Sicherheitskopie "zurückzuholen" in die Datenbank, falls durch einen Systemabsturz oder fehlerhaftes Löschen bzw. Ändern Daten unabsichtlich verlorengegangen sind. Die gleichen Verfahren, die für Sicherheitskopien geeignet sind, kann man auch zum Datenaustausch mit anderen Programmen / Datenformaten verwenden.
MySQL bietet folgende Varianten: Dumpfiles, CSV-Dateien und Kopien per ODBC in andere Formate (z.B. Microsoft Access).

Dumpfiles

Das Dienstprogramm MySQL dump kann im Installationsverzeichnis von mySQL und im Unterordner bin gestartet werden. Das Programm arbeitet kommandozeilenorientiert. Eine entsprechende Kommandozeile könnte z.B. so aussehen:
mysqldump -h Host -u Benutzer -p Datenbank [Tabellen] > Dateiname.sql
So werden SQL-Script-Dateien erzeugt, die ausgeführt werden können. Nachteil: Die Scripts belegen wesentlich mehr Speicherplatz als die Originaldaten. Voraussetzung: Zugriffsmöglichkeit auf den Datenbankserver mit TCP/IP.

CSV

MySQL bietet die Möglichkeit, CSV-Dateien zu erzeugen. Dieses Datenformat kann z.B. von Excel gelesen werden. CSV-Dateien können auf 2 Wegen erzeugt werden: mit mysqldump oder mit

SELECT * INTO outfile

Um CSV-Dateien mit mysqldump zu erzeugen, startet man mysqldump und gibt einen Befehl ein, der z.B. so aussehen könnte:
mysqldump -h myhost -u root -p -T /tmp -fields-terminated-by=; --fields-enclosed-by=' -lines-terminated-by=n Tabellenname
Die verschiedenen Optionen näher zu erläutern, würde hier zu weit führen. Natürlich müssen die Angaben auf den konkreten Fall passen. In unserem Beispiel wird die csv-Datei ins Verzeichnis TMP des Host gespeichert und kann mit Excel dort geöffnet werden.
Die zweite Variante, eine csv-Datei zu erzeugen, ist eine Sonderform des SQL-Befehls SELECT, die es nur in MySQL gibt. Sie kann z.B. im SQL-Monitor eingegeben werden:

SELECT * INTO OUTFILE dateiname [OPTIONEN] FROM tabelle;

Diesen Befehl kann man z.B. vom MySQL-Monitor aus eingeben. Die Optionen sind die gleichen wie bei mysqldump, man kann sie aber auch weglassen.
Das Erzeugen von CSV-Dateien ist unter günstigen Umständen sehr einfach, birgt aber Probleme, z.B. versteht MySQL als Verzeichnis immer nur den Server der Datenbank. Wer darauf keinen Zugriff hat, hat keine Chance, die erzeugte Datei wiederzufinden. Im Zweifelsfall sollte man einen Test machen, bevor man sich auf diese Variante verlässt.

Verknüpfung über ODBC z.B. mit Microsoft Access

Diese Variante wird selten publiziert, obwohl sie effektiv erscheint. Mit Hilfe des ODBC-Treibers myODBC, der als Download z.B. unter http://www.mysql.com/downloads/api-myodbc.html zur Verfügung steht, kann eine Verbindung zwischen Access und den Tabellen einer MySQL-Datenbank hergestellt werden. Die ODBC-Schnittstelle muss natürlich mit den entsprechenden Rechten eingerichtet sein. Über die Menüpunkte "Datei", "Externe Daten", "Importieren" oder "Tabellen verknüpfen" kann die Verbindung hergestellt werden. Wenn man "Verknüpfen" wählt, kann man über eine Tabellenerstellungsabfrage eine Access-interne Tabelle erzeugen, die sich nicht von einer importierten Tabelle unterscheidet. Man hat außerdem den Vorteil, dass man, falls nötig, gelöschte Daten einfacher wiederherstellen kann als mit allen anderen Methoden, indem man sie aus der Sicherheitskopie einfach anfügt. Diese Methode ist auch die einzige, wenn man keine Rechte auf die Ordner des Servers hat, so dass man nicht mit CSV-Daten arbeiten kann.

Wiederherstellung bzw. Import

Die Wiederherstellung von Daten bzw. der Import ist abhängig davon, aus welchem Datenformat die Daten importiert werden sollen. Im Falle von Dumpfiles startet man das entsprechende SQL-Script.
Generell kann man scripts mit folgender speziellen Form des Aufrufs von MySQL starten:

mysql -p{Paßwort} -u{Benutzername} {DB-Name} < dateiname

Der Import aus einer Textdatei in ein einzelnes File ist möglich mit dem Befehl (local ist optional)

LOAD DATA [LOCAL] INFILE "Textfile.txt" INTO TABLE Tabelle;

Dazu braucht man allerdings Rechte auf die Server-Ordner. Man kann einen Ordnernamen angeben, MySQL interpretiert ihn allerdings immer als Ordner auf dem Server, nicht auf dem Client.
Die Tabelle Textfile muss die entsprechende Struktur haben. Standard ist, dass die Felder durch das Tabulatorzeichen und die Datensätze durch das Zeilenende-Zeichen voreinander getrennt sind. Als Optionen kann man andere Trennzeichen angeben.
Wenn man Access-Tabellen erzeugt hat, kann man die Daten kopieren und an die verknüpfte MySQL-Tabelle anfügen. Diese muss natürlich in der passenden Struktur in MySQL angelegt sein.

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Auch interessant