MySQL Select Abfrage unter Windows in CSV Datei sichern

Ich bin gerade dabei für meine Firma eine MySQL Abfrage zu automatisieren. Dabei ist das Ziel eine Abfrage über die MySQL Datenbank laufen zu lassen, das Ergebnis in eine CSV Datei zu speichern und diese dann auf einen spezifizierten FTP Account zu laden.

Nachdem ich lange im Internet nach einen Tutorial für diesem Zweck gesucht habe, und leider nicht fündig geworden bin ich euch hier meinen Weg zum Ziel nicht vorenthalten (das Tutorial über den FTP Upload werde ich dann ein andermal, separat online stellen).

Als System kommt übrigens nicht Linux sondern Windows XP zum Einsatz. Bei Windows Vista oder Windows 7 verhält es sich aber vermutlich ähnlich.

Hier die Kurzform, wie vorgegangen werden muss:

1. MySQL Select Abfrage vorbereiten
2. Batch Datei für den Windows Taskplaner erstellen
3. Taskplaner so konfigurieren, dass der Task automatisch regelmäßig aufgerufen wird

Bevor es los geht noch ein Warnhinweis: Bitte macht eine Sicherung von eurer Datenbank bevor Ihr daran arbeitet. Auch wenn ich mit großer Sorgfalt dieses Tutorial hier erstellt habe und genauso auch in unserer Firma vorgehe heißt das nicht, dass sich bei dem einen oder anderen Punkt mal ein Fehler einschleicht. Kommentare sind daher gerne gesehen.

Los gehts:

MySQL Select Abfrage vorbereiten

Wir starten mit dem erstellen eines einfachen Textfiles. Dafür am besten unter Windows die Tastenkombination “Windowstaste + R” drücken und in dem sich öffnenden Fenster “notepad” eingeben:

image

Alternativ an dem Speicherort den Ihr frei wählen könnt im Windows Explorer mit der rechten Maustaste ein freies Feld anklicken und “Neu” – “Textdokument” auswählen.

image

Nun öffnet sich ein leeres Textfenster.

image

Dieses Textfile fungiert später als MySQL Select Statement. Ihr solltet hier also bereits wissen, was abgefragt wird und auch kontrollieren, dass alles hinhaut (z. B. via HeidiSQL). Als Beispiel ein Testcode:

   1: SELECT

   2:        ARTIKEL.barcode as EAN,

   3:        usw...

   4:  

   5:        FROM ARTIKEL

   6: ORDER BY ARTIKEL.barcode

   7: INTO OUTFILE 'C:/FTP-Listen/Test/Produktliste.csv'

   8:                 FIELDS TERMINATED BY ';'

   9:                 LINES TERMINATED BY '\r\n';

  10: exit

In Zeile 7 vermerkt ihr hier den Output der Abfrage in eine CSV Datei die auf der Festplatte im Ordner C:/FTP-Listen/Test gespeichert wird und den Namen Produktliste.csv trägt.

In Zeile 8 & 9 vermerkt Ihr, wie die Daten getrennt werden. Mehr dazu findet ihr hier: Load Data infile Nicht wundern, dass hier Load Data Infile vermerkt ist. Die Syntax ist identisch mit Into Outfile.

Kleiner Hinweis noch: Achtet beim beenden von Select Abfragen immer auf das Semikolon am Ende. Ansonsten erkennt MySQL nicht, dass die Abfrage hier zu Ende ist.

In Zeile 10 verlassen wir nach der erfolgreichen Anlage der Datei wieder den MySQL Server.

Die Datei speichert Ihr in dem gleichen Verzeichnis in dem später auch die Batch Datei angelegt werden soll. In diesem Fall am Besten in C:/FTP-Listen/Test/. Der Name der Datei ist in dem Fall abfrage.sql. Achtet auf die Endung der Datei. Sie darf nicht auf txt enden sondern mit sql.

Damit wäre Punkt 1 “MySQL Select Abfrage vorbereiten “ auch schon erledigt. Weiter zu Punkt 2.

Batch Datei für den Windows Taskplaner vorbereiten

Nun erstellen wir die eigentliche Batch Datei. Auch diese Datei ist nur wieder eine Textdatei (siehe oben) allerdings mit der Endung “.bat”.

So (oder so ähnlich) sollte Sie bei euch aussehen:

   1: @ECHO OFF

   2:  

   3: @REM wechsle zu SQL Verzeichniss

   4: CD c:\mysql\bin

   5:  

   6: @REM starte SQL Sicherung

   7: mysql --host=IP-ADRESSE(localhost) -uBENUTZERNAME -pPASSWORT -DDATENBANK < C:\FTP-Listen\Test\abfrage.sql

Zeile 1:

@Echo OFF bedeutet, dass später diese Datei ohne Unterbrechnung bzw. Wortmeldung durchläuft.

Zeile 3:

Die Bezeichnung “@REM” bedeutet, dass hier ein Kommentar startet. Der Kommentar endet nach der Zeile.

Zeile 4:

Hier vermerken wir den Speicherort der MySQL Programm Dateien. Diesen Ort benötigen wir, damit die MySQL Abfrage nachher überhaupt gestartet werden kann.

Zeile 6:

Mit diesem Befehl starten wir den Login Vorgang. Folgende Syntax müsst Ihr dabei verwenden:

mysql – startet den eigentlich Vorgang

–host=XXX – hier vermerkt ihr die IP-Adresse des Servers auf dem der MySQL Server läuft. Solltet Ihr direkt auf dem Server arbeiten könnt ihr auch “localhost” eingeben

-uXXX – direkt nach dem “-u” vermerkt ihr hier euren Benutzername zum einloggen (z. B. root schaut dann so aus: “–uroot”)

-pXXX – wie beim Benutzername vermerkt ihr hier das Passwort das zum einloggen in dem MySQL Server erforderlich ist. Z. B. “–uTest”

-DXXX – hier vermerkt Ihr die Datenbank auf der Ihr arbeiten wollt. (Achtung großes D!). z. B. –DTestdatenbank

< Datei_mit_der_Select_Abfrage – wie ihr sicherlich schon bemerkt habt, vermerken wir hier die Datei, die wir oben als “MySQL Abfrage vorbereiten” erstellt haben. Hier also den Speicherort der Datei angeben. In unserem Fall: “C:\FTP-Listen\Test\abfrage.sql”

Was geschieht jetzt durch diese Kommandos? In diese Fall wird der MySQL Server direkt über die Kommandozeilenabfrage mit einer Datei gefüttert, die eine Select Abfrage enthält. In dieser Select Abfrage ist auch der Speicherort für den Output der Abfrage festgehalten (bei uns C:\FTP-Listen\Test) sowie der Name der Datei (Produktliste.csv).

Im Endeffekt war es das schon. Das File wird nun erstellt und im gewünschten Speicherort abgelegt. Eigentlich könnten wir zum nächsten Punkt weitergehen aber vorher noch 3 kleine Hinweise für euch:

1. Ihr solltet alle Daten die hier ausprobiert zu erst ohne Batch im Kommando Fenster von Windows ausprobieren. Dazu drückt Ihr “Windows Taste + R” und gebt “CMD” ein. Ihr könnt die komplette Batch Datei so einfach ausprobieren in dem Ihr die Kommandos abschreibt oder einfügt. So könnt Ihr vorher schon evt. auftretende Fehler vermeiden.

image

2. Nochmal der Hinweis: Sicherung erstellen!

3. Bitte beachten, dass MySQL die erstellte CSV Abfrage selber nicht überschreiben kann und abbricht, wenn eine CSV Datei mit dem selben Namen noch vorhanden ist. Lösung des Problems ist, die Datei vor der Abfrage zu löschen. Das könnt Ihr mit folgenden Befehl am Anfang der Batch Datei bewerkstelligen:

   1: @REM SQL File löschen

   2: del /q C:\FTP-Listen\Test\Produktliste.csv

Am Besten Ihr fügt diesen Befehl direkt nach der Zeile 1 ein wenn ihr das wollt. Solltet Ihr später an einen Upload denken, so wird dieser Befehl ans Ende gestellt. Dazu aber dann irgendwann in einem anderen Tutorial mehr.

3. Taskplaner konfigurieren

Unter Windows XP Taskplaner öffnen unter “Start – Programme – Zubehör – System Tools – Geplante Tasks” oder “Start – Programme – Zubehör – Systemprogramme – Geplante Tasks”. Unter Windows 7 oder Vista am besten nach Aufgabenplaner suchen.

image

Über einen rechten Mausklick auf ein weißes Feld im Taskplaner könnt Ihr über “Neu” einen neuen Task erstellen. Nachdem ihr einen Namen ausgesucht habt, klickt Ihr doppelt auf die Datei bzw. Task. Daraufhin öffnet sich folgendes Fenster:

image

Hier gebt Ihr unter “Ausführen” die Batch Datei an, die Ihr erstellt habt. Am besten findet Ihr die Datei indem Ihr auf “Durchsuchen” klickt und zum Speicherort der Datei geht und diese auswählt.

image

Unter “Zeitplan” (siehe Bild oben) wählt Ihr aus, wie und wann die Datei ausgeführt werden soll. Hier will ich nicht tiefer einsteigen, da ich finde, dass das gut erklärt wird. Wenn Ihr Fragen dazu habt, könnt Ihr auch das Fragezeichen oben rechts im Fenster anklicken und auf das Feld klicken, zu dem Ihr eine Frage habt.

Das wars!

Ich hoffe, dass euch mein kleines Tutorial etwas hilft und ich hoffe, dass es verständlich geschrieben ist. Wenn nicht, meldet euch bitte einfach bei mir. Ich versuche dann zu helfen bzw. das Tutorial abzuändern.

Advertisements

Über technikkiste

Das ist mein Blog... Nun gut. Kein großartige neue Info. Was will ich hier. Spass haben. Und Spass fängt bei mir mit der einen oder anderen Technikspielerei an. Ob ich wirklich nur Technik (inkl. Software) hier eintrage sei aber dahingestellt. Lassen wir uns überraschen :D

Veröffentlicht am 23. Februar 2012 in MySQL, Windows und mit , , , , , , getaggt. Setze ein Lesezeichen auf den Permalink. 2 Kommentare.

  1. Alexander Koch

    „4: CD c:\mysql\bin“

    Wo kommt das her?
    Benutze Win10

  2. Hallo Alexander,

    das zielt auf die .exe von MySQL. Sprich der Speicherort der Datei die MySQL startet. Hier musst du unter Win10 schauen wo du MySQL gespeichert hast.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: