• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] CSV aus MySQL

Moin!

Ich habe das Problem, dass ich an der Konsole per Cron-Job automatisch alle paar Stunden einen Datenbank Auszug als CSV-Datei speichern muss. Leider habe habe ich nicht so recht eine Idee wie ich am schlausten anfangen soll.

Meine Idee war eine Bash-Datei zu bauen, die die Datenbank abfragt und das Ergebnis in die CSV-Datei schreibt.

Dadurch ergeben sich jetzt zwei Fragen:

- Kann man das so machen, oder ist geht das anders besser?
- Wo finde ich Anleitungen und Hilfen zur Bash?

Danke & Grüße aus Hamburg

Thomas
 
A

Anonymous

Gast
Problem ist hier wahrscheinlich nicht die Bash.

Datenbanken lassen sich über eine Scriptsprache SQL in aller Regel voll über die Konsole bedienen. Dazu muss man sich aber etwas beschäftigen, zB in den Handbüchern http://dev.mysql.com/doc/refman/5.1/en/batch-mode.html

Die Abfrage der Datenbank von der Konsole aus ist je nach genauer Aufgabe und je nach Umfang und Struktur der Datenbank bei deiner Aufgabe wahrscheinlich nur ein einziger Befehl, (kann aber je nach Struktur und interner Verkettung der Tabellen auch etwas komplizierter werden)
Daraus dann mit Hilfe der Bash gegebenenfalls noch eine CSV zu machen ist dann ein Kinderspiel.
Beispiel
Code:
SELECT * FROM shop;

+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    0001 | A      |  3.45 |
|    0001 | B      |  3.99 |
|    0002 | A      | 10.99 |
|    0003 | B      |  1.45 |
|    0003 | C      |  1.69 |
|    0003 | D      |  1.25 |
|    0004 | D      | 19.95 |
+---------+--------+-------+
Solche Ausgabe dann einfach in der Bash zB durch eine Pipe filtern und in eine Datei umleiten. geht mit einfachsten Mitteln auch
Code:
 SQL-BEFEHL | grep -v "^+" | cut -c 2- | tr "|" ";" > DATEI.CSV
ergibt eine Datei mit dem Inhalt
Code:
 article ; dealer ; price ;
    0001 ; A      ;  3.45 ;
    0001 ; B      ;  3.99 ;
    0002 ; A      ; 10.99 ;
    0003 ; B      ;  1.45 ;
    0003 ; C      ;  1.69 ;
    0003 ; D      ;  1.25 ;
    0004 ; D      ; 19.95 ;
und das sollte wohl für CSV genügen, kann aber bei Bedarf auch entsprechend noch anders angepasst werden.

robi
 
mtom schrieb:
- Kann man das so machen, oder ist geht das anders besser?
DUmps einer MySQL DB erstellt man am einfachsten mit mysqldump. Das kann Dumps erzeugen die dann wieder entweder als Eingabe für
- (My)SQL Interpreter
- CSV
- XML
taugen.
Ich würde XML gegenüber CSV präferieren.
 
Oben