Ich verwende MySQL-Abfragen die ganze Zeit in PHP, aber wenn ich LOAD DATA INFILE versuche, erhalte ich die folgende Fehlermeldung #1045 - Access denied for user 'user'@'localhost' (using password: YES)
Weiß jemand, was das bedeutet?
Ich bin auch auf dieses Problem gestoßen. Ich musste meiner SQL-Anweisung "LOCAL" hinzufügen.
Dies gibt beispielsweise das Berechtigungsproblem:LOAD DATA INFILE '{$file}' INTO TABLE {$table}
Fügen Sie Ihrer Anweisung "LOCAL" hinzu, und das Problem mit den Berechtigungen sollte behoben sein. Wie so:LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
Ich hatte dieses Problem. Ich habe mich umgesehen und keine befriedigende Antwort gefunden. Ich fasse unten die Ergebnisse meiner Suche zusammen.
Der Fehler "Zugriff verweigert" kann Folgendes bedeuten:
GRANT FILE on *.* to [email protected]'localhost'
); oder,Versuchen Sie es mit diesem Befehl:
load data local infile 'home/data.txt' into table customer;
Das sollte funktionieren. In meinem Fall hat es funktioniert.
Stellen Sie sicher, dass Ihr MySQL-Benutzer über die Berechtigung FILE verfügt.
Wenn Sie auf Shared Web Hosting sind, besteht die Möglichkeit, dass dies von Ihrem Hosting-Anbieter blockiert wird.
Die Saite aus Lyon hat mir einen sehr guten Tipp gegeben: Unter Windows müssen wir Slahes und keine Backslashes verwenden. Dieser Code funktioniert für mich:
File tempFile = File.createTempFile(tableName, ".csv");
FileUtils.copyInputStreamToFile(data, tempFile);
JdbcTemplate template = new JdbcTemplate(dataSource);
String path = tempFile.getAbsolutePath().replace('\\', '/');
int rows = template.update(MessageFormat
.format("LOAD DATA LOCAL INFILE ''{0}'' INTO TABLE {1} FIELDS TERMINATED BY '',''",
path, tableName));
logger.info("imported {} rows into {}", rows, tableName);
tempFile.delete();
Das passierte auch mir und obwohl ich alle von Yamir in seinem Beitrag beschriebenen Schritte befolgt hatte, konnte ich es nicht zum Laufen bringen.
Die Datei befand sich in /tmp/test.csv mit 777 Berechtigungen. Der MySQL-Benutzer hatte Dateiberechtigungen, die LOCAL-Option war in meiner MySQL-Version nicht zulässig, sodass ich nicht weiterkam.
Endlich konnte ich das Problem lösen, indem ich Folgendes ausführte:
Sudo chown mysql:mysql /tmp/test.csv
Ich bin auf dasselbe Problem gestoßen und habe es gelöst, indem ich die folgenden Schritte ausgeführt habe:
Informationen zu diesem dritten Punkt finden Sie unter: https://dev.mysql.com/doc/refman/5.7/de/server-system-variables.html#sysvar_secure_file_priv
BR,
ANZEIGE
Ich habe festgestellt, dass das Laden von MySQL-Tabellen schnell und problemlos vonstatten gehen kann (ich habe python/Django model manager scripts) verwendet):
1) Erstelle eine Tabelle mit allen Spalten VARCHAR (n) NULL, z.
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) Kopfzeilen (erste Zeile) aus csv entfernen und dann laden (wenn Sie das LOCAL vergessen, erhalten Sie "# 1045 - Zugriff verweigert für Benutzer 'user' @ 'localhost' (mit Passwort: YES)"):
mysql> LOAD DATA LOCAL INFILE "/home/magula6/cogswatch2/well2.csv" INTO TABLE cw_well2 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' -> ; Query OK, 119426 rows affected, 19962 warnings (3.41 sec)
3) Spalten ändern:
mysql> ALTER TABLE cw_well2 CHANGE spud_date spud_date DATE;
mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;
voilà!