hanscgn
Goto Top

MYSQL per shell daten einlesen funktioniert nicht

Hallo zusammen, ich bin begeistert was hier für tolle Tips und Hilfestellungen gegeben werden.

Vielleicht kann auch mir geholfen werden, ich sitze nun schon seit Tagen an einem Prob. mit dem ich alleine nicht fertig werde.
Liegt mit Sicherheit daran das ich gerade erst Anfange mich mit MYSQL zu beschäftigen.

Zu meinem Problem:

Ich hole mir aus einem logfile zeilen heraus die ich nun gerne in eine Datenbank schreiben möchte.

Der Aufbau der Datei

Monat Tag Uhrzeit Mac-Adresse

als Beispiel

Jun 26 15:34:15 00-50-56-c0-00-08
Jun 26 15:40:15 00-50-56-c0-00-08

u.s.w

Die Datei liegt nicht auf dem mysql server selbst sondern soll von einem client abgearbeitet werden.

Versucht habe ich es als erstes so
#! /bin/sh
SQL="LOAD DATA LOCAL INFILE '/tmp/datei' INTO TABLE `wlan` FIELDS TERMINATED BY ';'  
echo $SQL | mysql datenbank -h 192.168.100.2 .u user -p password
aber leider funktioniert es einfach nicht,


Fehlermeldung lautet Error 1064 at line 1: You have an error in your SQL syntax; check the Manual u.s.w...

Ich hoffe das sich einer meiner annimmt und helfen kann.


Vielen dank

Content-Key: 119671

Url: https://administrator.de/contentid/119671

Printed on: April 16, 2024 at 05:04 o'clock

Member: filippg
filippg Jul 03, 2009 at 15:01:42 (UTC)
Goto Top
Hallo,

FIELDS TERMINATED BY ';'
bedeutet wohl, dass er zwischen den einzelnen Feldern (Monat, Tag..) in den Datensätzen jeweils ; erwartet. In deinen Beispieldaten ist da aber ein Leerzeichen.
Daneben sind gerade Datumswerte immer kritisch, da hier ein String (01.01.09) in einen Zahlenwert (interne Repräsentation des Datums in MySql) umgewandelt werden kann - und das funktioniert nicht für jeden String. Das gilt natürlich nur, wenn die Spalte in MySql dann auch von einem Datumstyp ist, und kein Stringtyp. Ersteres ist aber i.A. ziemlich sinnvoll, da man nur dann vernünftig Abfragen drauf fahren kann. Also: was uns hier noch fehlt ist die Definition deiner Tabelle.
Zu guter Letzt halte ich für fragwürdig, ob das Pipen (echo $SQL | ...) wie gewünscht funktioniert, das überlasse ich aber einem Linuxer.
Ach ja: in SQL="LOAD DATA LOCAL INFILE '/tmp/datei' INTO TABLE `wlan` FIELDS TERMINATED BY ';' fehlt am Ende noch ein ".

Gruß

Filipp
Member: hanscgn
hanscgn Jul 03, 2009 at 21:18:38 (UTC)
Goto Top
Hallo filipp,

du hast recht, sorry ich habe wohl verpasst es dazu zu schreiben, ich habe es mit beiden varianten versucht (mit; und ohne;.

Also der SQL Aufruf funktioniert in meinem anderen Scipt hervorragend. Einziger Unterschied liegt darin das ich in meiner anderen Datenbank mein Syslog mit grep bearbeite und nur eine Zahl ausgegeben wird die ich dann
in die Datenbank sende.
Dort Arbeite ich auch mit Variablen, was ich aber hier nicht hinbekommen habe da ich hier ja mehrere Daten in mehreren Zeilen verarbeiten muss.

So ich bin das ganze nun noch mal durchgegangen, er nimmt es leider nicht an in die Datenbank auf.

Nun bin ich zum test mal hingegangen und habe mich direkt auf meinen Server per ssh verbunden.

Habe mich mit der datenbank verbunden und habe es mal auf diese Weise versucht.

load data local infile '/tmp/wlan' into table 'wlan' fields-terminated-by=';'

Ich bekomme keine Fehlermeldung, aber die Datensätze sind auch nicht in der Datenbank.

Finde es nur merkwürdig das wenn ich das File per PhpMyadmin importiere funktioniert es ohne Probleme.

Was mache ich falsch?

Gruß
Hans