Я отримав цю помилку під час завантаження даних під час використання докера [1]. Рішення спрацювало після того, як я виконав ці наступні кроки. Спочатку я створив базу даних і таблицю datavault
і fdata
. Коли я спробував імпортувати дані [2], я отримав помилку [3]. Потім я зробив:
SET GLOBAL local_infile = 1;
- Підтвердьте використання
SHOW VARIABLES LIKE 'local_infile';
- Потім я перезапустив сеанс MySQL:
mysql -P 3306 -u required --local-infile=1 -p
див. [4] про створення користувачів.
- Я відтворив свою таблицю, оскільки це вирішило мою проблему:
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));
- Нарешті, я імпортував дані за допомогою [2].
Для повноти я б додав, що запускав версію mysql всередині контейнера через docker exec -it testdb sh
. Версією mysql був mysql Ver 8.0.17 для Linux на x86_64 (MySQL Community Server - GPL) . Це також було перевірено за допомогою mysql.exe Ver 14.14 Distrib 5.7.14, для Win64 (x86_64), яка була іншою версією mysql від WAMP64. Відповідні команди, що використовуються, перелічені в [5].
[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] ПОМИЛКА 1148 (42000): Використана команда не дозволена у цій версії MySQL
[4] Потрібний клієнт був створений за допомогою:
CREATE USER 'required'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'required'@'%';
FLUSH PRIVILEGES;
- Вам може знадобитися цей рядок,
ALTER USER 'required'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
якщо ви натрапите на цю помилку :Authentication plugin ‘caching_sha2_password’ cannot be loaded
[5] Команди з використанням mysql від WAMP64:
mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile=1
де порт - це порт, що відображається на хості, як описано, docker ps -a
і IP-адреса хоста була отримана за допомогою docker-machine ip
(Це залежить від ОС та, можливо, версії Docker ).
- Створіть datavault2 бази даних та таблицю fdata, як описано вище
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';
- На мій запис, ця інша альтернатива завантаження файлу працювала після того, як я раніше створив datavault3 та fdata :
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"
і він успішно завантажив дані, які легко перевіряються після запуску select * from fdata limit 10;
.