Ich versuche, Daten mit in die MySQL-Datenbank zu laden
LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';
Das Thema dieser Frage ist die Antwort, die ich bekomme. Ich verstehe, dass das lokale Daten-Offloading standardmäßig deaktiviert ist und ich es mit dem Befehl aktivieren muss, local-infile=1
aber ich weiß nicht, wo ich diesen Befehl platzieren soll.
Ich finde die Antwort hier .
Dies liegt daran, dass die Servervariable
local_infile
auf FALSE | 0 gesetzt ist . Siehe aus dem Dokument .Sie können dies überprüfen, indem Sie Folgendes ausführen:
SHOW VARIABLES LIKE 'local_infile';
Wenn Sie über die Berechtigung SUPER verfügen, können Sie diese aktivieren (ohne den Server mit einer neuen Konfiguration neu zu starten), indem Sie Folgendes ausführen:
SET GLOBAL local_infile = 1;
quelle
local_infile=1
und den Serverdienst neu gestartet. Außerdem habe ich den Client mit der--local-infile dbname
Option ausgeführt, zmysql -u root -p --local-infile mydatabase
.http://dev.mysql.com/doc/refman/5.6/en/load-data-local.html
Fügen Sie dies in my.cnf ein - der
[client]
Abschnitt sollte bereits vorhanden sein (wenn Sie sich nicht zu sehr um die Sicherheit sorgen ).quelle
All dies hat es für mich auf meinem brandneuen Ubuntu 15.04 nicht gelöst.
Ich entfernte das
LOCAL
und bekam diesen Befehl:LOAD DATA INFILE A.txt INTO DB LINES TERMINATED BY '|';
aber dann bekam ich:
Das führte mich zu dieser Antwort von Nelson auf eine andere Frage zum Stackoverflow, die das Problem für mich löste!
quelle
SpringBoot 2.1 mit Standard-MySQL-Connector
Um dies zu lösen, folgen Sie bitte den Anweisungen
1. SET GLOBAL local_infile = 1;
Befolgen Sie zum Festlegen dieser globalen Variablen die Anweisungen in der MySQL-Dokumentation https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html
2. Ändern Sie die MySQL Connector-Zeichenfolge
allowLoadLocalInfile = true Beispiel: jdbc: mysql: // localhost: 3306 / xxxx? useSSL = false & useUnicode = yes & characterEncoding = UTF-8 & allowLoadLocalInfile = true
quelle
Ich hatte das gleiche Problem beim Importieren der CSV-Datei in AWS MySQL 8.0 RDS.
1) Auf
local_infile
Parameter prüfenmysql> SHOW VARIABLES LIKE 'local_infile';
2) Melden Sie sich vom Client ab und melden Sie sich mit dem folgenden Parameter erneut an.
mysql -u root -p -h rdsendpoint --local-infile=1
3) Führen Sie den gleichen Befehl aus
mysql> LOAD DATA LOCAL INFILE '/tmp/your.csv' INTO TABLE test.demo2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES; Query OK, 300 rows affected (0.01 sec) Records: 300 Deleted: 0 Skipped: 0 Warnings: 0
quelle
Ich hatte auch Probleme mit diesem Problem, als ich versuchte, CSV-Daten von meinem lokalen Computer mit MySQL Workbench unter Windows in die AWS RDS-Instanz hochzuladen .
Der Zusatz, den ich brauchte, war das Hinzufügen
OPT_LOCAL_INFILE=1
von: Verbindung> Erweitert> Andere. Hinweis CAPS war erforderlich.Ich habe diese Antwort von PeterMag in AWS Developer Forums gefunden .
Für weitere Informationen:
SHOW VARIABLES LIKE 'local_infile';
bereits zurückgegebenON
und die Abfrage war:LOAD DATA LOCAL INFILE 'filepath/file.csv' INTO TABLE `table_name` FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
Kopieren aus der oben genannten Antwortquelle:
quelle
Nur eine kleine Ergänzung.
Es wurde eine weitere Reinkarnation in mysql.connector Version 8.0.16 gefunden. Jetzt ist allow_local_infile = True erforderlich. Andernfalls wird der obige Fehler angezeigt . Arbeitete in früheren Versionen.
quelle
Wenn Sie Java8 oder +, JDBC und MySql8 verwenden und auf dieses Problem stoßen, versuchen Sie Folgendes:
Parameter zur Verbindungszeichenfolge hinzufügen:
Auch einstellen
in der Datei my.cnf.
Die neueste Version von mysql-java-connector erlaubt möglicherweise keine direkte Verbindung zu einer lokalen Datei. Mit diesem Parameter können Sie ihn also aktivieren. Das funktioniert bei mir.
quelle
Ich habe diesen Fehler beim Laden von Daten bei Verwendung von Docker [1] erhalten. Die Lösung funktionierte, nachdem ich die nächsten Schritte ausgeführt hatte. Anfangs habe ich die Datenbank und die Tabelle erstellt
datavault
undfdata
. Beim Versuch, die Daten zu importieren [2], wurde der Fehler [3] angezeigt. Dann habe ich:SET GLOBAL local_infile = 1;
SHOW VARIABLES LIKE 'local_infile';
mysql -P 3306 -u required --local-infile=1 -p
Siehe [4] zur Benutzererstellung.use datavault;
drop table fdata;
CREATE TABLE fdata (fID INT, NAME VARCHAR(64), LASTNAME VARCHAR(64), EMAIL VARCHAR(128), GENDER VARCHAR(12), IPADDRESS VARCHAR(40));
Der Vollständigkeit halber möchte ich hinzufügen, dass ich die MySQL-Version im Container über ausgeführt habe
docker exec -it testdb sh
. Die MySQL- Version war MySQL Version 8.0.17 für Linux unter x86_64 (MySQL Community Server - GPL) . Dies wurde auch mit mysql.exe Ver 14.14 Distrib 5.7.14 für Win64 (x86_64) getestet, einer anderen Version von mysql von WAMP64. Die zugehörigen verwendeten Befehle sind in [5] aufgeführt.[1]
docker run --name testdb -v //c/Users/C/Downloads/data/csv-data/:/var/data -p 3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:latest
[2]
load data local infile '/var/data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n' IGNORE 1 ROWS;
[3] FEHLER 1148 (42000): Der verwendete Befehl ist in dieser MySQL-Version nicht zulässig
[4] Der erforderliche Client wurde erstellt mit:
CREATE USER 'required'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'required'@'%';
FLUSH PRIVILEGES;
ALTER USER 'required'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
wenn dieser Fehler auftritt :Authentication plugin ‘caching_sha2_password’ cannot be loaded
[5] Befehle mit MySQL von WAMP64:
mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile=1
Dabei ist der Port der Port, der dem Host zugeordnet ist, wie von beschrieben,docker ps -a
und die Host-IP wurde mit ausgewähltdocker-machine ip
(Dies hängt vom Betriebssystem und möglicherweise von der Docker- Version ab).load data local infile 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n';
mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile datavault3 -e "LOAD DATA LOCAL INFILE 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' REPLACE INTO TABLE fdata FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS"
und sie lud die Daten erfolgreich, die nach dem Ausführen leicht überprüft werden konntenselect * from fdata limit 10;
.quelle
Weitere Informationen finden Sie im MySQL 8.0-Referenzhandbuch - 6.1.6 Sicherheitsprobleme mit LOAD DATA LOCAL
Führen Sie auf der Serverseite aus
mysql.server start --local-infile
Führen Sie auf der Clientseite aus
mysql --local-infile database_name -u username -p
quelle
Die besten Antworten sind richtig. Bitte überprüfen Sie sie zuerst direkt in MySQL CLI. Wenn dies das Problem dort behebt, möchten Sie möglicherweise, dass es in Python3 funktioniert. Übergeben Sie es einfach an den
MySQLdb.connect
Parameter asquelle