SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.06.2010 15:43:31

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2242

Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

Доброго времени суток!

Кто сталкивался или имеет догадки по сабжу - поделитесь пожалуйста размышлениями ).

Суть проблемы: есть сервер, с которого я в программке самописной (впрочем mysql-клиент выдает тот же результат) выполняю запрос

load data local infile '/home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_ФАЙЛА' into table `ИМЯ_БАЗЫ`.`ИМЯ ТАБЛИЦЫ` fields terminated by ',';

Файл составлен верно, тот же mysql query browser на этой машине этот запрос успешно съедает.

Однако через программу или mysql-клиент возвращается ошибка

ERROR 1148 (42000): The used command is not allowed with this MySQL version.

На этой машине версия mysql:

mysql --version
mysql  Ver 14.12 Distrib 5.0.67, for alt-linux-gnu (i586) using readline 5.2

В то же время с другого сервера, на котором

mysql --version
mysql  Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (x86_64) using readline 5.1

этот запрос проходит успешно.

На самом mysql-сервере:
mysql --version
mysql  Ver 14.12 Distrib 5.0.67, for portbld-freebsd7.0 (amd64) using  5.2


Собственно, в том и вопрос - куда копнуть, в каком параметре может дело быть? Гугль не дал ответа (.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#2 10.06.2010 17:44:25

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6722

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

Ему не нравится LOCAL, он должен быть явно разрешен как с серверной,
так и с клиентской стороны.

celestia:~$ mysql --help | grep local
  --local-infile      Enable/disable LOAD DATA LOCAL INFILE.

Неактивен

 

#3 26.06.2010 12:17:55

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2242

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

Спасибо за ответ!

Через mysql-клиент надо было подключаться с опцией --local-infile=1,
а при использовании mysql c api спасло mysql_options с параметром MYSQL_OPT_LOCAL_INFILE )


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#4 07.03.2019 13:54:17

vjr
Участник
Зарегистрирован: 07.03.2019
Сообщений: 12

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

paulus написал:

Ему не нравится LOCAL, он должен быть явно разрешен как с серверной,
так и с клиентской стороны.

celestia:~$ mysql --help | grep local
  --local-infile      Enable/disable LOAD DATA LOCAL INFILE.

как это можно сделать/проверить?

я проверяю переменную local_infile:

set global local_infile = 1;
show variables like 'local_infile';

и получаю ответ: ON.

тем не менее следующая команда выдаёт ошибку 1148:

load data local infile 'D:\\.csv'
into table ZSAP2PIMMATSTAMM
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\r\n';


Error Code: 1148. The used command is not allowed with this MySQL version

Неактивен

 

#5 07.03.2019 23:39:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

вы проверяете серверную переменную, а ещё нужно включить на стороне клиента
https://dev.mysql.com/doc/refman/8.0/en … local.html

p.s. не стоит дублировать вопрос по разным темам

Неактивен

 

#6 08.03.2019 11:01:02

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

Добавлю немного теории.
Выполнение load data local infile происходит следующим образом:
https://mysqlserverteam.com/wp-content/uploads/2019/02/inline_umlgraph_49.png
1. клиент отправляет запрос на выполнение SQL команды
2. сервер (вместо отправки результирующего набора или состояния) отправляет специальный запрос (0xFB) вместе с именем файла, который клиент должен прочитать и отправить
3. клиент передает содержимое файла
4. клиент передает пустой пакет для обозначения конца файла
5. сервер выполняет команду и по завершению выдает OK или ошибку

Сначала сервер решает - можно ли читать файл с данными, размещенный на стороне клиента (серверная переменная local_infile).

Затем происходит удивительное: на 2-ом этапе сервер не просто сообщает о готовности принимать данные, а в явном виде указывает имя файла, который нужно передать. И клиент начинает решать - а доверяет ли он серверу настолько, чтобы выполнять такие команды (за это и отвечает параметр local-infile на стороне клиента).

В обоих случаях генерируется ошибка,  которая ни разу не приближает к пониманию проблемы, скорее наоборот:
Error Code: 1148. The used command is not allowed with this MySQL version

P.S. о пользе чтения всей темы smile
vjr, вы разместили свой вопрос как раз под сообщением, которое содержит нужны вам ответ
и если б я вчера посмотрел внимательней, тоже меньше бы клаву давил

Неактивен

 

#7 08.03.2019 14:17:28

vjr
Участник
Зарегистрирован: 07.03.2019
Сообщений: 12

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

ого! спасибо за подробное объяснение!
я просто искал сначала готовое/похожее решение в других топиках.
поэтому был один и тот же вопрос в разых местах.
значит - мне нужно теребить админа ubuntu-сервера чтобы он проверил/установил
loose-local-infile=1.

а я со своей стороны, из MySQL Workbench не могу запросить: в каком состоянии находится эта переменная?

Неактивен

 

#8 08.03.2019 17:18:36

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

vjr написал:

а я со своей стороны, из MySQL Workbench не могу запросить: в каком состоянии находится эта переменная?

нет, MySQL Workbench это условно "браузер" через который можно обращаться к серверу базы данных, но сервер ничего не знает о настройках клиента.

Какой программой вы пытаетесь сделать load data?
Если консольным клиентом, то вы можете сами запустить его из командной строки с нужным параметром:
mysql --local-infile -h ... -u ... -p
Если Workbench, то в последних версиях есть баг и единственный вариант использовать старую версию Workbench

Неактивен

 

#9 08.03.2019 18:12:36

vjr
Участник
Зарегистрирован: 07.03.2019
Сообщений: 12

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

в моём распоряжении только MySQL Workbench 8.0, в котором я хочу создать триггер+процедуру, чтобы регулярно читать внешние данные.
ubuntu-сервер находится в руках админа, который как все админы витает в облаках, и до нужд простых смертных снисходит редко.
но в вашей ссылке на официальную документацию всё понятно описано - буду пробовать.
спасибо за потраченное на меня время и хороших вам выходных.
"Schönes Wochenende!" - как здесь говорят.

Неактивен

 

#10 18.03.2019 14:32:27

vjr
Участник
Зарегистрирован: 07.03.2019
Сообщений: 12

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

проверил вместе с ubuntu-администратором все переменные: всё установлено так, как написано в документации.
и даже файл, лежащий прямо на сервере, читается командой LOAD DATA INFILE 'your_file' INTO TABLE 'table_name'. без LOCAL!
но мне это нисколько не помогает: надо читать файл, лежащий в Windows-сети, то есть с LOCAL.
англоязычные форумы полны криков отчаяния, что LOAD DATA LOCAL INFILE не работает, начиная с MySQL Workbench 8.0.12.
что делать, что делать?!
SOURCE 'file.sql' тоже не хочет.
есть ли ещё какие-то возможности прочесть данные из текстового файла?

Неактивен

 

#11 18.03.2019 15:51:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

попробовать старую версию Workbench
какая ошибка при SOURCE  ?

Неактивен

 

#12 18.03.2019 16:54:59

vjr
Участник
Зарегистрирован: 07.03.2019
Сообщений: 12

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

Workbench говорит, что SOURCE не принадлежит к его синтаксу:

source D:\script.sql;


14:51:16    source D:\script.sql    Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'source D:\script.sql' at line 1    0.000 sec

Неактивен

 

#13 18.03.2019 17:17:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

SOURCE это команда консольного клиента mysql, а не сервера MySQL

Неактивен

 

#14 18.03.2019 17:26:30

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

vjr написал:

в моём распоряжении только MySQL Workbench 8.0, в котором я хочу создать триггер+процедуру, чтобы регулярно читать внешние данные.

кстати, вы load data хотите делать внутри процедуры/триггера ?
так это нельзя, см https://dev.mysql.com/doc/refman/8.0/en … tions.html

Неактивен

 

#15 21.03.2019 11:11:08

vjr
Участник
Зарегистрирован: 07.03.2019
Сообщений: 12

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

vasya написал:

кстати, вы load data хотите делать внутри процедуры/триггера ?
так это нельзя...

да, именно это я и хотел сделать:

CREATE PROCEDURE my_proc()
BEGIN
  LOAD DATA LOCAL INFILE '\\server\folder\file.csv' INTO TABLE data ;
END

CREATE EVENT IF NOT EXISTS my_event
ON SCHEDULE EVERY 12 HOUR
DO CALL my_proc();

но если такое вообще невозможно, то надо искать другие пути.

Неактивен

 

#16 21.03.2019 11:19:59

vjr
Участник
Зарегистрирован: 07.03.2019
Сообщений: 12

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

тогда (если я в праве отнимать ваше время) отступлю на 2 шага назад и опишу задачу:
имеется экспериментальная установка, на которой висит около десятка измерительных приборов.
эти приборы в состоянии, после заполнения внутренней памяти, записывать свои результаты в текстовые файлы в сети.
эти данные необходимо переносить в таблицы базы данных MySQL.
сейчас я делаю это с помощью Excel и VBA, но статовать процесс импорта приходится вручную.
хотелось бы автоматизироватъ этот процесс средствами MySQL.
не может быть, чтобы это было невозможно.

Неактивен

 

#17 21.03.2019 16:30:32

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5635

Re: Ошибка при запросе "load data local infile": The used command is not allowed with this mysql version

имхо, только средствами MySQL не получится
можно:
-) сделать load.sql содержащий команды load data local ...
-) создать load.bat в котором будет
mysql --local-infile ...(хост, юзер, порт, пароль, бд)... < load.sql
-) по крону запускать батник

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson