zeitgesteuertes Download und Import in mySQL

Status
Für weitere Antworten geschlossen.

msegna

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
18
Punkte für Reaktionen
0
Punkte
0
Hallo Forum

Habe wieder einmal ein spezielles Anliegen. Möchte folgendes durchführen:
die DS soll selbstständig alle 6 Stunden vom Web eine csv Datei herunterladen und speichern. Danach sollte die Datei ebenfalls selbstständig in phpmyadmin importiert werden und eine bestimmte Tabelle überschrieben.

Der Download mit der DS sollte wohl kein Problem sein. Jedoch scheint mir unmöglich, dies zeitgesteuert und selbstständig durchführen zu lassen. Das grössere Problem habe ich mit phpmyadmin. Geht das so, wie ich mir das vorstelle? Wenn ja.....wie genau?

Für eure Beiträge möchte ich mich bereits jetzt bei allen bedanken.

Freundlichst
Moritz
 

amarthius

Super-Moderator
Teammitglied
Mitglied seit
03. Jun 2009
Beiträge
6.814
Punkte für Reaktionen
33
Punkte
174
Informier dich doch mal über "cron". Damit bekommst du zumindest die Zeitsteuerung hin.

Wie du das dann mit phpmyadmin anstellst, kann ich dir nicht sagen. So weit kenne ich mich nicht aus.
 

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344
Meinem Verständnis nach ist PHPMyAdmin eine reine PHP-Administrationsoberfläche die also immer einen GUI-Aufruf benötigt und das ist automatisiert sehr ungünstig. Ich würde mich deswegen nicht auf PMA stützen sondern nach anderen Importmethoden für die SQL-DB umsehen. Nur weil PMA das kann, muss es sich nicht unbedingt auch automatisieren lassen.

MfG Matthieu
 

msegna

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
18
Punkte für Reaktionen
0
Punkte
0
@amarthius: ist cron bei der DS denn schon "dabei"? oder muss ich den zusätzlich installieren? Wenn cron bereits dabei ist, wo find ich diesen bzw. wie aktiviere ich diesen?

@Matthieu: dachte, dass mysql auf phpmyadmin ab Verion 5.1 zeitgesteurte Jobs erledigen könnte?

Gruss

Moritz
 

Trolli

Benutzer
Mitglied seit
12. Jul 2007
Beiträge
9.848
Punkte für Reaktionen
1
Punkte
0
Wenn Du eine PHP-Lösung auf dem Webserver bevorzugst, kannst Du dir phpMyBackupPro mal ansehen. Das kann man dann auch über cron automatisieren.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Auf der DS gibt es irgendwo das Kommando mysqlimport welches direkt Files in die DB importieren kann.
Für csv muss man wohl etwas tricksen
Code:
mysqlimport --fields-optionally-enclosed-by=""" --fields-terminated-by=,  --lines-terminated-by="\r\n" --user=DEIN_MYSQL_USER --password DEINE_DB DEIN_FILE.csv
je nach "Art" des csv muss man die fields-Parameter anpassen. Zudem ist afaik mysqlimport nicht in PATH, also danach suchen auf der DS. Ich meine aber es sei irgendwo unterhalb von /usr/syno/
 

msegna

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
18
Punkte für Reaktionen
0
Punkte
0
@jahlives: danke für deine Antwort. Wo genau soll ich denn diesen Befehl schreiben? im Admintool? Sorry, habe wirklilch keine grosse Ahnung und bin desshalb auf Schritt-für-Schritt-Anweisungen angewiesen.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ne Schritt-für-Schritt-Anleitung kann dir niemand geben, weil wir nicht wissen können wo das File herkommt, wie deine Tabelle heisst, wie die Spalten deiner Tabelle benammst sind und wie das csv aufgebaut ist:)
Grundsätzlich ist das ein Kommando für die Shell/Konsole (mehr dazu findest du im Wiki). Ich würde in PHPMyAdmin mal eine Testtabelle erstellen, damit du dir beim Testen im Fehlerfall nicht gleich die produktive Tabelle vernichtest :) Dannn lädst du die Datei aus dem Internet. Das Kommando dazu ist wget z.B.
Code:
cd /root
wget http://URL.tld/path/to/file.csv
dann musst du auf der DS mal nach dem mysqlimport Kommando suchen, damit du den korrekten Pfad bekommst
Code:
find / -type f -name mysqlimport
wenn du den Pfad hast, dann musst du noch gucken wie das csv aufgebaut ist. Oft haben csv ja ; als Trenner. Probieren könntest du also
Code:
/path/to/mysqlimport --fields-optionally-enclosed-by=""" --fields-termineted-by=";" --lines-terminated-by="\r\n" --user=DEIN_MYSQL_USER --password DEINE_MYSQL_DB /root/file.csv
wichtig: mysqlimport sucht nach einer Tabelle in MEINE_MYSQL_DB, die gleich heisst wie das csv ohne Dateiendung. also würde im obigen Bsp in der DB MEINE_MYSQL_DB die Tabelle file gesucht
 

msegna

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
18
Punkte für Reaktionen
0
Punkte
0
@jahlives: Danke, dass ist ein super imput! Kannst du mir sagen, wohin die Datei gespeichert wird, nach dem ich sie mit dem Befehl wget heruntergeladen habe?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Die Datei wird bei wget - sofern du nichts anderes angibst - im aktuellen Arbeitsverzeichnis gespeichert. Drum der cd /root
Im obigen Bsp wäre also das File unter /root/file.csv zu finden
 

msegna

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
18
Punkte für Reaktionen
0
Punkte
0
hmm...jetzt bin ich unsicher:
also, ich gebe im cronjobs unter command: wget http://...... ein und bestimme, wann die downloads gemacht werden sollten. ode mache ich hier bereits meinen ersten Fehler? Wenn ich die Datei im Ordner "Unsere_Dokumente" speichern möchte muss ich...was eingeben?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
gib im cronjob einfach
Code:
cd /pfad/verzeichnis && wget http://....
an. Durch den cd legst du das Arbeitsverzeichnis fest und dann lädt der wget in dieses Verzeichnis.
Achtung: der cron verwendet eine eigene PATH-Umgebung. Kann also sein, dass wget alleine ned reicht, sondern du den ganzen Pfad zum wget angeben musst. Den kompletten Pfad zu wget kriegst du mittels
Code:
which wget
raus
 

msegna

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
18
Punkte für Reaktionen
0
Punkte
0
der which get hat /opt/bin/wget angegeben. Indemfall muss ich: .....&& /opt/bin/wget http://.... im command eingeben?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
jap
 

msegna

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
18
Punkte für Reaktionen
0
Punkte
0
jawoll...ich habs geschafft! musste noch volume1 angeben :)

So, jetzt zum nächsten Schritt. die wird jetzt periodisch überschrieben. So weit so gut. Nun sollte ich das mysqlimport finden. habe den Befehl in putty eingegeben: find / -type f -name mysqlimport
hat aber nichts ergeben...d.h. es bleibt einfach stehen. wo könnte diese datei versteckt sein?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
klar bleibt der erstmal stehen. Der muss ja erst alle deine volumes abklappern um den Befehl zu finden. Erst wenn du auf der Shell wieder was tippen kannst ist die Suche abgeschlossen
 

syntec

Benutzer
Mitglied seit
08. Apr 2009
Beiträge
120
Punkte für Reaktionen
0
Punkte
16
Sorry, dass ich mich so spät einmische :)

Ich sichere seit gestern meine Dateien per mysql/gzip etc. folgendermaßen (Habe Zugriff auf den mysql-Server von extern)

Daten ziehen
/usr/syno/mysql/bin/mysqldump --all-databases --comments --user=XXX --password=XXX --host=XXX | /bin/gzip > /volume1/verzeichnis/backup.sql.gz

Daten lokal einfügen
/bin/gunzip -c /volume1/verzeichnis/backup.sql.gz | /usr/syno/mysql/bin/mysql --default-character-set=latin1 --user=root --password=XXX --host=localhost

Charset beim lokalen einfügen muss evtl. angepasst werden (in diesem Fall eine uralte mysql Datenbank auf dem "richtigen" Server)
 

msegna

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
18
Punkte für Reaktionen
0
Punkte
0
So, jahlives, bin wieder mal da
Hatte etwas viel um die Ohren und konnte mich nicht mehr um das Problem kümmern. Die Suche nach mysqlimport blieb erfolglos. Kam nichts auf den Bildschirm.
Kann ich die Datei noch anders suchen ?
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!