ОШИБКА 1148: используемая команда не позволяется с этой версией MySQL

Я пытаюсь загрузить данные в mysql использование базы данных

LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

темой этого вопроса является ответ, который я получаю. Я понимаю, что локальная разгрузка данных прочь по умолчанию, и я должен включить ее с помощью команду local-infile=1 но я не знаю, куда поместить эту команду.

59
задан 2 March 2017 в 22:14

6 ответов

SpringBoot 2.1 с коннектором MySQL Default

Для Решения этого следуйте инструкциям

1. УСТАНОВИТЕ ГЛОБАЛЬНЫЙ local_infile = 1;

для установки этой глобальной переменной следуйте инструкциям, предоставленным в документации MySQL https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html

2. Измените MySQL Connector String

allowLoadLocalInfile=true Пример: jdbc:mysql://localhost:3306/xxxx? useSSL=false& useUnicode=yes& characterEncoding=UTF-8& allowLoadLocalInfile=true

4
ответ дан 1 November 2019 в 11:30

У меня была та же проблема при импорте файла 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
2
ответ дан 1 November 2019 в 11:30

Просто мало дополнения.

Найденный другим перевоплощением в 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)
1
ответ дан 1 November 2019 в 11:30

Обратитесь к Справочнику MySQL 8.0 - 6.1.6 Проблемы безопасности с ДАННЫМИ ЗАГРУЗКИ, ЛОКАЛЬНЫМИ

На стороне сервера, работайте

mysql.server start --local-infile

На стороне клиента, работайте

mysql --local-infile database_name -u username -p
0
ответ дан 1 November 2019 в 11:30

Главные ответы корректны. Проверьте их прямой в 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)
0
ответ дан 1 November 2019 в 11:30

Я получил эту ошибку при загрузке данных при использовании докера [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) . Это было также протестировано с [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] (Это зависит от ОС и возможно Докер версия).
  • база данных Create 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;.
0
ответ дан 1 November 2019 в 11:30

Другие вопросы по тегам:

Похожие вопросы: