gelöst Laden von MySQL-Daten per LOAD DATA (LOCAL) INFILE

Thema wurde von MrFab16.4, 4. Juli 2017 erstellt.

  1. MrFab16.4
    MrFab16.4 Erfahrener Benutzer
    Registriert seit:
    22. April 2015
    Beiträge:
    397
    Danke erhalten:
    40
    Danke vergeben:
    83
    Hallo,

    in MySQL kann man auch SQL-Tabellen mit vorbereiteten .TXT- oder .CSV-Dateien laden.
    Siehe: (Link nur für registrierte Nutzer sichtbar.)
    und (Link nur für registrierte Nutzer sichtbar.)

    Ich habe zwar einige SQL-Kenntnisse, aber eine vorbereitete .TXT- oder .CSV-Datei habe ich noch
    nie eingelesen und eine SQL-Tabelle damit gefüllt...

    Wo ich dabei gerade hänge ist dabei der genauen Definition der 1. Zeile des LOAD DATA Statements.
    Denn es gibt da wohl die Varianten LOAD DATA INFILE und LOAD DATA LOCAL INFILE

    Aktuell habe ich meine erstellte .CSV-Datei zum Laden, names 'Bentley.csv', in ein extra neu erstelltes
    Verzeichnis names 'apload' (ja, mit 'a' am Anfang ;)) in meine Gambio-Shopinstallation, namens 'c24_gambio_shopware', hochgeladen

    Mein aktuelles MySQL-Statement sieht wie folgt aus:

    LOAD DATA INFILE './c24_gambio_shopware/apload/Bentley.csv' INTO TABLE `products_xsell`
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\r\n'
    IGNORE 1 LINES

    Wobei es aber zu einer Fehlermeldung kommt, wegen eines fehlenden Server-Passworts kommt...

    Frage:
    Hat jemand evtl. ein funktionierendes LOAD DATA MySQL-Statement,
    welches ich dann nur noch auf meine Dateinamen anpassen muss...? Wäre toll!
     
  2. Ed
    Ed Erfahrener Benutzer
    Registriert seit:
    6. November 2011
    Beiträge:
    395
    Danke erhalten:
    198
    Danke vergeben:
    141
    Hi @Stromlinie21 ,

    Sehr viele (oder fast alle?) Hoster lassen LOAD DATA INFILE nicht mehr zu. Aus Sicherheitsrelevanten Gründen. Geht das überhaupt in Deinem Hostingpaket?

    Ed
     
  3. MrFab16.4
    MrFab16.4 Erfahrener Benutzer
    Registriert seit:
    22. April 2015
    Beiträge:
    397
    Danke erhalten:
    40
    Danke vergeben:
    83
    Dass es da evtl. sicherheitsrelevante Gründe gibt war mir (bis gerade) noch nicht bewusst...
    Daher habe ich auch das Thema hier mal gepostet, weil es evtl. mehr 'Abhängigkeiten' hat, als man zunächst denkt....

    Nach 'was' genau bzw. welchen Berechtigungen müsste ich in meinem Hostingpaket schauen, um festzustellen, ob ich so etwas darf?
     
  4. Ed
    Ed Erfahrener Benutzer
    Registriert seit:
    6. November 2011
    Beiträge:
    395
    Danke erhalten:
    198
    Danke vergeben:
    141
    @Stromlinie21 ,

    Damit war es möglich, extrem grosse csv Dateien superschnell (und ohne timeout) zu importieren. Und genau darin liegt die "Gefahr"
    Schreib mal deinen Hoster an.

    Für spezielle Importe mit "grossen" csv Dateien muss man eine andere Technik verwenden, damit das ohne timeout durchläuft. Das ist aber schon etwas komplexer.

    Ed
     
  5. MrFab16.4
    MrFab16.4 Erfahrener Benutzer
    Registriert seit:
    22. April 2015
    Beiträge:
    397
    Danke erhalten:
    40
    Danke vergeben:
    83
    Danke, habe meinen Hoster Webgo gerade entsprechend angemailt!

    Konkret sind es einige hundert Datensätze, die ich (in die Tabelle products_xsell fürs Cross-Merketing) laden will,
    es sollte also zumindest kein Timeout-Problem geben... ;)
     
  6. Anonymous
    Anonymous Erfahrener Benutzer
    Mitarbeiter
    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.749
    Danke vergeben:
    137
    Bei LOAD DATA INFILE gib es so eine Art Catch-22. Man braucht auf dem MySQL-Server das FILE-Recht, um das benutzen zu können. Mit diesem Recht kann man aber auch per Datenbankserver Dateien überall (!!) auf dem Server anlegen, das heißt, es gibt da wirklich erhebliche Sicherheitsimplikationen. Deshalb haben in aller Regel nur Datenbankadministratoren dieses Recht. Also, wer überhaupt erst danach fragen muss, wird dieses Recht mit absoluter Sicherheit nicht bekommen können, alles andere wäre vom Hoster grob fahrlässig.

    Ein paar hundert Zeilen aus einer CSV-Datei in eine Datenbanktabelle zu schreiben, ist in PHP aber auch eine Sache von ’nem Dutzen Zeilen Code und eher wenigen Sekunden Ausführungszeit. Auch deshalb wird dafür vermutlich kein Hoster Extrawürste braten.
     
  7. MrFab16.4
    MrFab16.4 Erfahrener Benutzer
    Registriert seit:
    22. April 2015
    Beiträge:
    397
    Danke erhalten:
    40
    Danke vergeben:
    83
    Danke für die Infos!

    Das klang halt relativ leicht in der o.g. Dokumentation mit dem Befehl LOAD DATA INFILE...:)
    Gut, dass ich damit nicht länger meine Zeit verbracht habe, sondern hier gefragt habe.... o_O

    Mittlerweile habe ich eine CSV-Datei erstellt, in der die benötigten/vorgefertigten INSERT SQL-Statements
    für die Tabelle products_xsell stehen und bei denen ich dann nur noch die gewünschten products_id Werte ergänzen muss.
    Dann kopiere ich alle Zeilen bzw. INSERT-Statements aus der CSV-Datei (mit copy und paste) und führe diese unter PHPMYADMIN aus....fertig! :)