Geschrieben von: Rene Drescher-Hackel
Kategorie: Datenbank
This printed page brought to you by AlphaSierraPapa
Wer z.B. von MS Access auf MySQL umsteigen möchte, der fragt sich nicht zuletzt, wie denn seine Daten von Access nach MySQL übertragen werden können. Mit der Installation von MySQL unter Windows 2000 Professional werden einige Tools mit ausgeliefert, die diese Arbeit übernehmen. Auch gibt es im Internet diverse Zusatzprogramme, die entsprechende Import/Exportfunktionen integriert haben.
Im heutigen Artikel möchte ich Ihnen insbesondere das Programm mysqlimport.exe sowie die Importfunktionen des phpMyAdmin und des Programms MySQLFront.exe vorstellen. Ich werde Ihnen dabei aufzeigen, was Sie beachten müssen, was geht und was eben nicht geht.
Das Programm mysqlimport.exe wird mit der MySQL-Installation in den Ordner \bin kopiert. Der Start des Programmes erfolgt vom DOS-Prompt aus, wobei der Aufruf in der Regel nach folgendem Muster erfolgt:
mysqlimport --host=… --user=… --password=… dbname importdatei
Haben Sie in der my.ini-Optionsdatei Angaben zum User, Password und Host in der Gruppe [client] hinterlegt, so können Sie mysqlimport.exe auch ohne Angaben zum Host, User und Password starten (vgl. auch Artikel Administration des MySQL-Servers unter Windows 2000).
Statt "dbname" tragen Sie natürlich den Namen der Datenbank ein, in der sich die Tabelle befindet, die die zu importierenden Daten aufnehmen soll.
Für "importdatei" geben Sie bitte den vollständigen Pfad und den Dateinamen inklusive Dateierweiterung der Datei an, die die zu importierenden Daten enthält. Unter Verwendung der Einträge in my.ini würde das dann wie folgt aussehen:
mysqlimport test E:\temp\tblcount.txt
Voraussetzung für einen fehlerfreien Ablauf des Datenimports ist unter anderem daß in der hier angegebenen Datenbank eine Tabelle mit dem Namen "tblcount" existiert, denn anhand des Dateinamens der Importdatei wird die Tabelle bestimmt, in die die Daten übertragen werden sollen. Auch sollten Sie vorher entsprechend sicherstellen, daß die Spaltendefinitionen den erwarteten Daten entsprechen.
Bevor wir aber unsere tblcount.txt importieren können, wollen wir uns erst einmal ansehen, wie wir diese Datei unter Access erzeugen. Für den heutigen Artikel habe ich eine Tabelle "tblcount" erstellt, die wir nach MySQL übertragen wollen. Die Tabelle hat dabei folgende Struktur:
Auf unserem MySQL-Server (im folgenden nur noch SQL-Server) legen wir dann in der TEST-Datenbank die Tabelle "tblcount" nach folgendem Muster an:
Kehren wir nun aber wieder zurück zu Access und beginnen wir den Export der Tabellendaten. Markieren Sie die Tabelle, die Sie exportieren wollen - in unserem Beispiel ist dies die Tabelle "tblcount" - und rufen Sie mit der rechten Maustaste das Kontextmenü auf. Hier klicken Sie auf "Exportieren".
Es öffnet sich der Dialog, in dem Sie zunächst angeben müssen, unter welchem Namen, welchem Dateityp und in welchem Verzeichnis Sie die zu exportierende Datei speichern möchten.
Der Dateiname wird hier entsprechend dem Tabellennamen vorgegeben, also hier "tblcount". Als Dateityp wählen wir "Textdatei"; als Verzeichnis habe ich für unser Beispiel "E:\temp" ausgewählt. Bestätigen Sie Ihre Eingaben abschließend mit "Speichern".
Jetzt öffnet sich erneut ein Fenster.
Wählen Sie hier bitte die Schaltfäche "Weitere...". Sie erhalten dann folgendes Bild, wo Sie weitere Einstellungen für den Export Ihrer Daten vornehmen können.
Als "Feldtrennzeichen" wählen Sie bitte "{Tabulator}". Dies ist der Standardwert, den das Programm mysqlimport erwartet. Geben Sie stattdessen ein anderes Zeichen/Merkmal an, so müssen Sie später beim Import das Programm mysqlimport mit der Option - -fields-terminated-by= '....' aufrufen, wobei statt der in den einfachen Hochkommatas eingeschlossenen Punkte Ihr entsprechendes Zeichen anzugeben ist.
Als "Textbegrenzungszeichen" wählen Sie hier bitte "{kein}" aus. Auch dies enspricht dem von mysqlimport erwarteten Standardwert. Andernfalls müssen Sie mysqlimport mit der Option - -fields-enclosed-by='...' aufrufen, wobei auch hier wieder statt der Punkte Ihr gewähltes Zeichen anzugeben ist.
Als "Datumsreihenfolge" wählen Sie "JMT" und markieren die Option "vierstellige Jahreszahlen". Dies bedeutet, daß unabhängig vom in der Accesstabelle gespeicherten Datumsformat, Datumsangaben im Format Jahr-Monat-Tag gespeichert werden. Damit statt des Punktes auch der Bindestrich "-" als Datumstrennzeichen benutzt wird, müssen Sie auch hier die ensprechende Änderung vornehmen.
Alle anderen Voreinstellungen können so verbleiben.
Damit diese Einstellungen Ihnen immer erhalten bleiben, speichern Sie diese zuvor ab. Wählen Sie hierfür "Speichern..." und tragen Sie in dem sich öffnenden Dialogfenster "mysql-spezifikation" ein.
Wenn Sie die nächste Tabelle exportieren wollen, brauchen Sie nur noch Ihre "Spezifikation..:" auswählen und alle Einstellungen sind dann entsprechend wieder vorhanden.
Bestätigen Sie die folgenden zwei Dialogfenster mit "Weiter" und abschließend mit "Fertig stellen". Ihre Tabellendaten sind nun in die Textdatei "tblcount.txt" exportiert worden.
Ein Blick in die "tblcount.txt" verrät uns, daß die Daten absolut simpel abgespeichert sind.
Um unsere Textdatei jetzt zu importieren, öffnen wir die Eingabeaufforderung und rufen von hier das Programm mysqlimport wie folgt auf:
mysqlimport test E:\temp\tblcount.txt
Nach erfolgreichem Import erhalten wir dann folgende Anzeige:
In unserem Beispiel wurden 71 Datensätze erfolgreich importiert.
Das SQL-Gegenstück zur Kommandozeilenapplikation mysqlimport ist die SQL Anweisung LOAD DATA IN FILE.
Sie könnten auch im MySQL-Monitor bzw. scriptseitig über SQL (z.B. nach einem erfolgreichen Dateiupload) den Datenimport folgendermaßen realisieren:
LOAD DATA INFILE "E:\temp\tblcount.txt" INTO TABLE test.tblcount;
Statt vom DOS-Prompt mit mysqlimport die Daten zu importieren können Sie auch ein entsprechendes Frontend einsetzen. Ich möchte mich hierbei auf zwei - meiner Meinung nach die geläufigsten - Anwendungen beschränken: den phpmyadmin und mysqlfront.
Schauen wir uns als erstes den phpmyadmin an. PHPmyAdmin können Sie von phpwizard.net/projects/phpMyAdmin/ downloaden (Installationshinweise finden Sie bei phpmyadmin.sourceforge.net/documentation/).
Wenn Sie den phpmyadmin aufgerufen haben, wählen Sie als erstes die Datenbank ("test") und dann die Tabelle ("tblcount") aus. Anschließend erhalten Sie folgende Anzeige,
wobei Sie dem Link "Textdatei in Tabelle einfügen" folgen. Hierauf zeigt sich Ihnen folgendes Bild:
Wie Sie sehen, können Sie hier einige Einstellungen hinsichtlich des Aufbaus Ihrer Importdatei vornehmen. In unserem Beispiel hatten wir festgelegt, daß das Feldtrennzeichen der Tabulator ist. Wir müssen also als Feldtrennzeichen hier "\t" (für den Tabulator) eingeben.
Alle anderen Optionsfelder bleiben leer. Für den Fall, daß sich Daten schon in der Tabelle befinden, geben wir hier an, daß der Tabelleninhalt gegebenenfalls zu ersetzen ist.
Nun brauchen wir nur noch über die Schaltfläche "Durchsuchen" unsere Textdatei auswählen und anschließend das Formular abschicken.
Zuvor sei an dieser Stelle eine Bemerkung zur Performance gemacht:
Der Datenimport erfolgt hier über die SQL-Anweisung "LOAD DATA INFILE". Im php-Script des phpmyadmin wird diese Anweisung um das Schlüsselwort "LOCAL" erweitert. Wenn LOCAL mit angegeben wird, werden die Daten vom Client geholt, andernfalls muß die Importdatei auf dem SQL-Server vorhanden sein. Wenn der Import der Daten - was durchaus der Regelfall sein kann - über das Internet erfolgt, kann der Import mit "LOCAL" erheblich länger dauern. Aus diesem Grund habe ich das Script ldi_check.php um einen Dateiupload erweitert.
Öffnen Sie die Datei ldi_check.php in Ihrem phpmyadmin-Verzeichnis mit einem Editor (z.B. phpEd, den Sie unter der Adresse www.soysal.com/PHPEd/download.php3 herunterladen können).
In der Zeile 16 fügen Sie folgenden Code ein:
// ****** Dateiupload *************************************** // ****** Datei wird in der sql.php wieder gelöscht ********* // Pfadangabe fuer das Ziel $mypath = dirname($PATH_TRANSLATED)."/_upload/"; // das individuelle Upload-Verz. if ($error <> 1): $dest = $mypath.$textfile_name; if (!copy($textfile, $dest)) { echo "Die Datei $textfile_name konnte nicht auf den Server übertragen werden!<br>\n"; $error = 1; } endif; // ************ Ende Dateiupload ****************************
In der Variable "$mypath" wird der Pfad des Uploadverzeichnisses angelegt. Das Verzeichnis "_upload" müssen Sie dabei noch in Ihrem phpmyadmin-Verzeichnis erstellen. Mit der copy-Funktion wird dann letztlich die Datei auf den Server übertragen.
Nun müssen wir noch die SQL-Abfrage etwas umformulieren. Ändern Sie den Code (ca. in Zeile 36 nach Einfügen der Uploadfunktion) wie folgt ab:
$query = "LOAD DATA INFILE '$mypath/$textfile_name' $replace INTO TABLE $into_table ";
Im wesentlichen ist das Schlüsselwort "LOCAL" zu entfernen und der vollständige Pfad zur Datei, sowie die Datei selbst anzugeben. Den Pfad haben wir ja in der Variablen "$mypath" und den Dateinamen in "$textfile_name" hinterlegt.
Damit aber am Ende nicht Unmengen an verwaisten Importdateien auf dem Server "schlummern", werden wir diese auch wieder löschen, sobald sie nicht mehr benötigt werden.
Hierzu öffnen wir die Datei sql.php und fügen in Zeile 71 folgende Anweisung ein:
@unlink("_upload/".$textfile_name);
Die Funktion "unlink" ist für das Entfernen der Datei verantwortlich.
Soviel zum PHP-spezifischen Teil. Kehren wir nun zurück zu unserem Formular im phpmyadmin. Wenn Sie nun das Formular abschicken, wird die Datei zuerst auf den Server übertragen, die Daten importiert, die übertragene Importdatei auf dem Server wieder gelöscht und Sie erhalten dann die folgende Anzeige:
Wenn kein Fehler angezeigt wird, sehen Sie - wie hier in der Grafik auch dargestellt - das SQL-Statement und die Tabellendefinition. Um nun zu überprüfen, ob denn alle Daten auch wirklich korrekt übernommen wurden, wählen Sie einfach "Anzeigen".
Statt des phpmyadmin können Sie aber auch mit mysqlfront den Datenimport durchführen.
Zunächst müssen Sie auch hier wieder die Datenbank und Tabelle auswählen (markieren), in der die Daten der Importdatei eingefügt werden sollen. Anschließend wählen Sie im Menü "Im-/Export" den Eintrag "Import Textfile".
Daraufhin erhalten Sie die folgende Dialogbox:
Die Einstellungen für die Datenbank ("Database") und die Tabelle ("Import into table") werden auf Grund der vorangegangenen Auswahl hier entsprechend übernommen. Unter "Filename" wählen Sie die Importdatei - in unserem Beispiel ist dies wieder die "tblcount.txt".
Die weiteren Einstellungen erfolgen analog den Ausführungen zum phpmyadmin. Für unser kleines Beispiel bedeutet dies also wieder, daß als Feldbegrenzungszeichen der Tabulator, also \t anzugeben ist. Um diesen Eintrag vornehmen zu können, müssen Sie die Kontrollbox vor "terminated by" entsprechend aktivieren (anklicken). Alle weiteren Einstellungen können in unserem Beispiel wieder vernachlässigt werden. Lediglich "Replace" wird noch aktiviert, um eventuell vorhandene Datensätze zu überschreiben.
Anschließend lassen wir mysqlfront die Anweisung ausführen, indem wir die "Import!" -Schaltfläche betätigen.
Wie Ihnen der Artikel gezeigt hat, ist es relativ unproblematisch, seine bestehenden Daten aus einer ACCESS-Datenbank nach MySQL zu übertragen. Zum einen können Sie das mit dem MySQL-Server ausgelieferten Programm "mysqlimport" bewerkstelligen, oder aber auch durch ein eigenes Script über die SQL-Anweisung "LOAD DATA INFILE" realisieren.
Weiters habe ich - neben einem kleinen Exkurs in die PHP-Programmierung - Ihnen heute gezeigt, wie sich der Datenimport mit zwei stark verbreiteten Frontends (phpmyadmin und mysqlfront) umsetzen läßt. Neben diesen gibt es sicherlich noch viele andere Möglichkeiten, wie man seine Daten nach MySQL übertragen kann.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010731.zip
Administration von MySQL unter Windows 2000
http:/www.aspheute.com/artikel/20010730.htm
Installation und Konfiguration von MySQL unter Windows 2000 Professional
http:/www.aspheute.com/artikel/20010618.htm
Yet Another Access Database Administration Tool
http:/www.aspheute.com/artikel/20020410.htm
MySQL Home
http://www.mysql.com
MySQL-Front
http://www.anse.de/mysqlfront/
PHPEd
http://www.soysal.com/PHPEd/
phpMyAdmin
http://phpwizard.net/projects/phpMyAdmin/
phpMyAdmin Documentation
http://phpmyadmin.sourceforge.net/documentation/
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.