Я пытаюсь загрузить данные в mysql использование базы данных
LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';
темой этого вопроса является ответ, который я получаю. Я понимаю, что локальная разгрузка данных прочь по умолчанию, и я должен включить ее с помощью команду local-infile=1
но я не знаю, куда поместить эту команду.
SpringBoot 2.1 с коннектором MySQL Default
Для Решения этого следуйте инструкциям
для установки этой глобальной переменной следуйте инструкциям, предоставленным в документации MySQL https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html
allowLoadLocalInfile=true Пример: jdbc:mysql://localhost:3306/xxxx? useSSL=false& useUnicode=yes& characterEncoding=UTF-8& allowLoadLocalInfile=true
У меня была та же проблема при импорте файла CSV в AWS MySQL 8.0 RDS.
mysql> ЗАГРУЖАЮТ ДАННЫЕ ЛОКАЛЬНЫЙ INFILE '/tmp/your.csv' В ПОЛЯ ТАБЛИЦЫ test.demo2, ЗАВЕРШЕННЫЕ'', ВКЛЮЧЕННЫЙ '"' СТРОКАМИ, ЗАВЕРШЕННЫМИ '\n', ИГНОРИРУЮТ 1 СТРОКУ;
ОШИБКА 1148 (42000): используемая команда не позволяется с этой версией
1 MySQL), Проверка на local_infile
параметр
mysql> SHOW VARIABLES LIKE 'local_infile';
2) Журнал из клиента и использования перевхода в систему ниже параметра.
mysql -u root -p -h rdsendpoint --local-infile=1
3) Выполнение та же команда
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
Просто мало дополнения.
Найденный другим перевоплощением в mysql.connector ver 8.0.16 Это теперь требует allow_local_infile=True, или Вы будете видеть вышеупомянутую ошибку. Работавший в предыдущих версиях.
conn = mysql.connector.connect(host=host, user=user, passwd=passwd, database=database, allow_local_infile=True)
Обратитесь к Справочнику MySQL 8.0 - 6.1.6 Проблемы безопасности с ДАННЫМИ ЗАГРУЗКИ, ЛОКАЛЬНЫМИ
На стороне сервера, работайте
mysql.server start --local-infile
На стороне клиента, работайте
mysql --local-infile database_name -u username -p
Главные ответы корректны. Проверьте их прямой в MySQL CLI сначала. Если это решает проблему там, можно хотеть иметь ее работающий в Python3, просто передают его MySQLdb.connect
как параметр
self.connection = MySQLdb.connect(
host=host, user=settings_DB.db_config['USER'],
port=port, passwd=settings_DB.db_config['PASSWORD'],
db=settings_DB.db_config['NAME'],
local_infile=True)
Я получил эту ошибку при загрузке данных при использовании докера [1]. Решение работало после того, как я выполнил эти следующие шаги. Первоначально, я создал базу данных и таблицу datavault
и fdata
. Когда я пытался импортировать данные [2], я получил ошибку [3]. Затем я сделал:
SET GLOBAL local_infile = 1;
SHOW VARIABLES LIKE 'local_infile';
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));
Для полноты, я добавил бы, что выполнял mysql версию в контейнере через docker exec -it testdb sh
. mysql версия была mysql Ver 8.0.17 для Linux на x86_64 (MySQL Community Server - GPL) . Это было также протестировано с [1 124] 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): используемая команда не позволяется с этой версией
[4] MySQL, которую необходимый клиент был создан с помощью:
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
, где порт - ты, отображенный порт в хост, как описано [1 117] и IP хоста был получен с помощью [1 118] (Это зависит от ОС и возможно Докер версия). 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"
и это успешно загрузило данные, легко проверенные после выполнения select * from fdata limit 10;
.