The used command is not allowed with this MySQL version

MySQL, PostgreSQL, InterBaseSQL etc

Модераторы: Art.i, vasya

The used command is not allowed with this MySQL version

Сообщение bow-guild » Пт мар 25, 2016 10:47 am

Бьюсь второй день:
есть модуль для Drupal, который импортирует информацию в БД через csv файл.
И не вносится информация, вот ошибка:
Syntax error or access violation: 1148 The used command is not allowed with this MySQL version: LOAD DATA LOCAL INFILE :file INTO TABLE tmr_import_tmp
Самое странное, что в самом запросе есть еще вот такая строчка:
db_query($q, array(':file'=>$file), array(PDO::MYSQL_ATTR_LOCAL_INFILE => 1));
Что вроде как должно включать эту переменную,вообще не уверен насчет нее. Код не мой.

в /etc/my.cnf внес вот это:

[client]
local-infile=1
loose-local-infile = 1
[mysqld]
local-infile =1
[mysql]
local-infile = 1
Не работает. Таже ошибка.
Вывод консоли:
mysql --help | grep local
--local-infile Enable/disable LOAD DATA LOCAL INFILE.
local-infile TRUE

Сервер на Debian-7-x86
Стоит версия Mysql
5.5.40-0+wheezy1.
Читал тему:
viewtopic.php?t=7320
Просто load data infile попробуйте
Тогда проходит вполне успешно
LOAD DATA INFILE "/tmp/test.csv" INTO TABLE tmr_import_tmp;
Добавлена 1 строка.
Идентификатор вставленной строки: 1 ( Запрос занял 0.0019 сек. )
Этот запрос удачно проходит через pphmyadmin.
Через него же
LOAD DATA LOCAL INFILE "/tmp/1.csv" INTO TABLE tmr_import_tmp;
The used command is not allowed with this MySQL version
Если подкорректировать запрос в самом модуле, то ошибка меняется:
QLSTATE[HY000]: General error: 29 File '/tmp/phpKwntLW' not found (Errcode: 13)
Игрался с правами на папку /tmp - не дало эффекта.
Решение явно на поверхности.
Что то уже идеи кончились)
ЗЫ-добавил в /etc/mysql/debian-start
MYCHECK_PARAMS="--all-databases --fast --silent --local-infile"
В самом файле /etc/mysql/my.cnf выключил все директивы, касаемые local-infile, коррекно включилась 100% эта переменная после рестарта Mysql:
mysql --help | grep local
--local-infile Enable/disable LOAD DATA LOCAL INFILE.
local-infile TRUE
Все равно нет изменений.
phpinfo выдает
Directive Local Value Master Value
mysql.allow_local_infile On On
bow-guild
 
Сообщений: 129
Зарегистрирован: Ср мар 11, 2009 12:06 pm

Re: The used command is not allowed with this MySQL version

Сообщение swg » Пт мар 25, 2016 12:53 pm

Решение очевидно и верное http://stackoverflow.com/questions/1076 ... cal-infile
И на сервере и на клиенте должна быть включена такая опция. На сервере достаточно "local-infile" в секции mysqld. У вас это работает.
( Как вариант ещё можно запустить mysqld дописав опцию --local-infile=1 )

>> phpinfo выдает
>> Directive Local Value Master Value
>> mysql.allow_local_infile On On
А не используется mysql (он устарел, либо mysqli, либо PDO). Конкретно у вас pdo_mysql.

>> Самое странное, что в самом запросе есть еще вот такая строчка:
>> db_query($q, array(':file'=>$file), array(PDO::MYSQL_ATTR_LOCAL_INFILE => 1));
Теоретически именно она и должна включать LOCAL на клиенте.
Должна использоваться по необходимости при коннекте $pdo = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_LOCAL_INFILE=>1));
Посмотреть надо, где этот массив из db_query используется.

>> Если подкорректировать запрос в самом модуле, то ошибка меняется:
>> QLSTATE[HY000]: General error: 29 File '/tmp/phpKwntLW' not found (Errcode: 13)
>> Игрался с правами на папку /tmp - не дало эффекта.
Скорее всего и правда not found. Права там 777, всё для всех. Прочитать уж точно можно.
( open_basedir может запретить обращение к файлам для php, но он тут ни при чем должен быть, ведь не php файл читать собирается, а Mysql )
swg
флудит форум
 
Сообщений: 2384
Зарегистрирован: Сб окт 07, 2006 9:09 am
Откуда: NNov

Re: The used command is not allowed with this MySQL version

Сообщение bow-guild » Пт мар 25, 2016 1:50 pm

( Как вариант ещё можно запустить mysqld дописав опцию --local-infile=1 )

Запускал и так, тоже ноль эффекта.
Скорее всего и правда not found. Права там 777, всё для всех. Прочитать уж точно можно.
( open_basedir может запретить обращение к файлам для php, но он тут ни при чем должен быть, ведь не php файл читать собирается, а Mysql )

ну php должен по идее создать там папку, закачать временный файл, и уже оттуда начать импорт (это я так думаю)
к тому же, имя выбирается случайно , или мне корежить запрос попробовать, что бы жестко прописать путь к временным файлом, но это не выход.
на деле папка не создается, но все прекрасно импортируется средствами самого mysql, в самом друпале есть некий модуль, проверяющий все на ошибки, с файловой стороны у него не нашлось нареканий.
Пока что наверное обойдусь запросом к бд так, без оберток и свистоперделок (скорее всего импорт будет нужен 1 раз), но вообще неприятно(
bow-guild
 
Сообщений: 129
Зарегистрирован: Ср мар 11, 2009 12:06 pm

Re: The used command is not allowed with this MySQL version

Сообщение swg » Пт мар 25, 2016 3:30 pm

Жирным я выделил самое важное, что имеет смысл проверить. А именно исходный код модуля.
Но вообще, разрешать local, имхо, плохая идея.
swg
флудит форум
 
Сообщений: 2384
Зарегистрирован: Сб окт 07, 2006 9:09 am
Откуда: NNov

Re: The used command is not allowed with this MySQL version

Сообщение bow-guild » Пт мар 25, 2016 4:32 pm

Вот так всегда-ставишь вещь-а она нифига не работает. Приходится допиливать напильником.
bow-guild
 
Сообщений: 129
Зарегистрирован: Ср мар 11, 2009 12:06 pm


Вернуться в Базы данных

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2