Antworten:
Ich bin gerade auch auf dieses Problem gestoßen. Ich musste LOCAL
meiner SQL-Anweisung hinzufügen .
Dies führt beispielsweise zu dem Berechtigungsproblem:
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
Fügen Sie LOCAL
Ihrer Erklärung hinzu, und das Problem mit den Berechtigungen sollte behoben sein. Wie so:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
--local-infile
Option aufrufen .
Ich hatte dieses Problem. Ich suchte herum und fand keine zufriedenstellende Antwort. Ich fasse unten die Ergebnisse meiner Suche zusammen.
Der Fehler "Zugriff verweigert" kann Folgendes bedeuten:
GRANT FILE on *.* to user@'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.
ERROR 1148 (42000): The used command is not allowed with this MySQL version
Stellen Sie sicher, dass Ihrem MySQL-Benutzer die Berechtigung FILE erteilt wurde.
Wenn Sie ein gemeinsames Webhosting verwenden, besteht die Möglichkeit, dass dies von Ihrem Hosting-Anbieter blockiert wird.
Die Zeichenfolge aus Lyon gab mir einen sehr guten Tipp: 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();
Ich bin auf dasselbe Problem gestoßen und habe es gelöst, indem ich die folgenden Schritte ausgeführt habe:
Zu diesem dritten Punkt verweisen Sie auf: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
BR,
ANZEIGE
Dies passierte mir auch 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 Option LOCAL 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 fand es einfach, wenn Sie die Befehlszeile verwenden
Anmelden alsmysql -u[username] -p[password] --local-infile
dann SET GLOBAL local_infile = 1;
Wählen Sie Ihre Datenbank mit aus use [db_name]
und schlussendlich LOAD DATA LOCAL INFILE 'C:\\Users\\shant\\Downloads\\data-1573708892247.csv' INTO TABLE visitors_final_test FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
SET GLOBAL local_infile = 1;
scheint jedoch in RDS nicht zu funktionieren, aber trotzdem hat das --local-infile
den Trick getan
Ich habe festgestellt, dass das Laden von MySQL-Tabellen schnell und problemlos sein kann (ich habe Python / Django Model Manager-Skripte verwendet):
1) Erstellen Sie eine Tabelle mit allen Spalten VARCHAR (n) NULL, z.
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) Entfernen Sie die Header (erste Zeile) aus csv und laden Sie sie (wenn Sie LOCAL vergessen haben, erhalten Sie "# 1045 - Zugriff für Benutzer 'user' @ 'localhost' verweigert (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à!
Dies bedeutet wahrscheinlich, dass das von Ihnen angegebene Passwort 'user'@'localhost'
falsch ist.