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
und fdata
. Beim Versuch, die Daten zu importieren [2], wurde der Fehler [3] angezeigt. Dann habe ich:
SET GLOBAL local_infile = 1;
- Bestätigen Sie mit
SHOW VARIABLES LIKE 'local_infile';
- Dann habe ich meine MySQL-Sitzung neu gestartet:
mysql -P 3306 -u required --local-infile=1 -p
Siehe [4] zur Benutzererstellung.
- Ich habe meinen Tisch neu erstellt, da dies mein Problem gelöst hat:
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));
- Schließlich habe ich die Daten mit [2] importiert.
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;
- Möglicherweise benötigen Sie diese Zeile,
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ählt docker-machine ip
(Dies hängt vom Betriebssystem und möglicherweise von der Docker- Version ab).
- Erstellen Sie die Datenbank datavault2 und die Tabelle fdata wie oben beschrieben
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';
- Für meinen Datensatz funktionierte diese andere Alternative zum Laden der Datei, nachdem ich zuvor datavault3 und fdata erstellt hatte :
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 konnten select * from fdata limit 10;
.