Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Доброго времени суток!
Кто сталкивался или имеет догадки по сабжу - поделитесь пожалуйста размышлениями ).
Суть проблемы: есть сервер, с которого я в программке самописной (впрочем 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
Собственно, в том и вопрос - куда копнуть, в каком параметре может дело быть? Гугль не дал ответа (.
Неактивен
Ему не нравится LOCAL, он должен быть явно разрешен как с серверной,
так и с клиентской стороны.
celestia:~$ mysql --help | grep local
--local-infile Enable/disable LOAD DATA LOCAL INFILE.
Неактивен
Спасибо за ответ!
Через mysql-клиент надо было подключаться с опцией --local-infile=1,
а при использовании mysql c api спасло mysql_options с параметром MYSQL_OPT_LOCAL_INFILE )
Неактивен
paulus написал:
Ему не нравится LOCAL, он должен быть явно разрешен как с серверной,
так и с клиентской стороны.
celestia:~$ mysql --help | grep local
--local-infile Enable/disable LOAD DATA LOCAL INFILE.
как это можно сделать/проверить?
я проверяю переменную local_infile:
Неактивен
вы проверяете серверную переменную, а ещё нужно включить на стороне клиента
https://dev.mysql.com/doc/refman/8.0/en … local.html
p.s. не стоит дублировать вопрос по разным темам
Неактивен
Добавлю немного теории.
Выполнение load data local infile происходит следующим образом:
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. о пользе чтения всей темы
vjr, вы разместили свой вопрос как раз под сообщением, которое содержит нужны вам ответ
и если б я вчера посмотрел внимательней, тоже меньше бы клаву давил
Неактивен
ого! спасибо за подробное объяснение!
я просто искал сначала готовое/похожее решение в других топиках.
поэтому был один и тот же вопрос в разых местах.
значит - мне нужно теребить админа ubuntu-сервера чтобы он проверил/установил
loose-local-infile=1.
а я со своей стороны, из MySQL Workbench не могу запросить: в каком состоянии находится эта переменная?
Неактивен
vjr написал:
а я со своей стороны, из MySQL Workbench не могу запросить: в каком состоянии находится эта переменная?
нет, MySQL Workbench это условно "браузер" через который можно обращаться к серверу базы данных, но сервер ничего не знает о настройках клиента.
Какой программой вы пытаетесь сделать load data?
Если консольным клиентом, то вы можете сами запустить его из командной строки с нужным параметром:
mysql --local-infile -h ... -u ... -p
Если Workbench, то в последних версиях есть баг и единственный вариант использовать старую версию Workbench
Неактивен
в моём распоряжении только MySQL Workbench 8.0, в котором я хочу создать триггер+процедуру, чтобы регулярно читать внешние данные.
ubuntu-сервер находится в руках админа, который как все админы витает в облаках, и до нужд простых смертных снисходит редко.
но в вашей ссылке на официальную документацию всё понятно описано - буду пробовать.
спасибо за потраченное на меня время и хороших вам выходных.
"Schönes Wochenende!" - как здесь говорят.
Неактивен
проверил вместе с 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' тоже не хочет.
есть ли ещё какие-то возможности прочесть данные из текстового файла?
Неактивен
попробовать старую версию Workbench
какая ошибка при SOURCE ?
Неактивен
Workbench говорит, что SOURCE не принадлежит к его синтаксу:
Неактивен
SOURCE это команда консольного клиента mysql, а не сервера MySQL
Неактивен
vjr написал:
в моём распоряжении только MySQL Workbench 8.0, в котором я хочу создать триггер+процедуру, чтобы регулярно читать внешние данные.
кстати, вы load data хотите делать внутри процедуры/триггера ?
так это нельзя, см https://dev.mysql.com/doc/refman/8.0/en … tions.html
Неактивен
vasya написал:
кстати, вы load data хотите делать внутри процедуры/триггера ?
так это нельзя...
да, именно это я и хотел сделать:
Неактивен
тогда (если я в праве отнимать ваше время) отступлю на 2 шага назад и опишу задачу:
имеется экспериментальная установка, на которой висит около десятка измерительных приборов.
эти приборы в состоянии, после заполнения внутренней памяти, записывать свои результаты в текстовые файлы в сети.
эти данные необходимо переносить в таблицы базы данных MySQL.
сейчас я делаю это с помощью Excel и VBA, но статовать процесс импорта приходится вручную.
хотелось бы автоматизироватъ этот процесс средствами MySQL.
не может быть, чтобы это было невозможно.
Неактивен
имхо, только средствами MySQL не получится
можно:
-) сделать load.sql содержащий команды load data local ...
-) создать load.bat в котором будет
mysql --local-infile ...(хост, юзер, порт, пароль, бд)... < load.sql
-) по крону запускать батник
Неактивен
Страниц: 1