2012-09-14 14 views
6

Ich bekomme einen Fehler, wenn Ladedaten zum Einfügen der Abfrage verwenden.MySQL: Laden Daten infile

"load data infile '/home/bharathi/out.txt' into table Summary" 

Diese Datei befindet sich dort. Aber mysql löst den folgenden Fehler aus. ERROR 29 (HY000): Datei '/home/bharathi/out.txt' nicht gefunden (Fehlermeldung Errcode: 13)

show variables like 'data%'; 
+---------------+-----------------+ 
| Variable_name | Value   | 
+---------------+-----------------+ 
| datadir  | /var/lib/mysql/ | 
+---------------+-----------------+ 

Daten DuFormal zeigt genehmigten Ordner zu verankern. Ich kann diese Variable nicht ändern, weil sie schreibgeschützt ist.

Wie kann ich den Ladedaten-Infile-Vorgang durchführen?

Ich habe versucht, Dateiberechtigungen zu ändern, Daten lokale Infile laden. Es wird nicht funktionieren.

+0

Auf welchem ​​System (Server oder Client) befindet sich die Datei? – eggyal

+0

Server und Client oder dieselbe Maschine. – kannanrbk

Antwort

11

Wie unter LOAD DATA INFILE Syntax dokumentiert:

Aus Sicherheitsgründen, wenn auf dem Server Textdateien lesen, müssen die Dateien entweder befinden sich in dem Datenbank-Verzeichnis oder von allen lesbar sein. Um LOAD DATA INFILE für Serverdateien verwenden zu können, müssen Sie die Berechtigung FILE haben. Siehe Section 6.2.1, “Privileges Provided by MySQL”. Wenn die Systemvariable secure_file_priv für Nicht-LOCAL Ladevorgänge auf einen nicht leeren Verzeichnisnamen festgelegt wird, muss sich die zu ladende Datei in diesem Verzeichnis befinden.

Sie sollten daher entweder:

  • Stellen Sie sicher, dass Ihre MySQL-Benutzer hat die FILE Privileg und unter der Annahme, dass die secure_file_priv Systemvariable nicht gesetzt ist:

    • die Datei lesbar machen von allen; oder

    • Verschieben Sie die Datei in das Datenbankverzeichnis.

  • Oder verwenden Sie die LOCAL Schlüsselwort die Datei von Ihrem Client und an den Server übermittelt gelesen zu haben. Beachten Sie jedoch Folgendes:

    LOCAL funktioniert nur, wenn Ihr Server und Ihr Client beide so konfiguriert wurden, dass dies zulässig ist. Wenn beispielsweise mysqld mit --local-infile=0 gestartet wurde, funktioniert LOCAL nicht. Siehe Section 6.1.6, “Security Issues with LOAD DATA LOCAL.

+0

Beat mich durch Sekunden ... +1 – fancyPants

8

Die Lösung, die wirklich für mich gearbeitet wurde an:

sudo chown mysql:mysql /path/to/the/file/to/be/read.csv 

es zum späteren Nachschlagen Hinzufügen.

Verwandte Themen