Как я могу исправить ошибку загрузки MySQL

Я не совсем уверен, что подобный вопрос был закрыт, я пытаюсь выполнить следующую программу MySQL.

mysql -e "load data local infile \
'/tmp/ept_inventory_wasp_export_04292013.csv' into \
table wasp_ept_inv fields terminated by ',' \
lines terminated by '\n' ;"

в командной строке bash и получите эту ошибку

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

Как я могу обойти эту проблему?

Я действительно запускаю эту команду из программы Python, но вытащил команду, чтобы попытаться запустить ее в командной строке bash.

Я видел, как я могу изменить my.cnf(local-infile), но я не хочу, чтобы это глобальное изменение, если я могу его избежать.

Здесь версия MySQL.

mysql Ver 14.14 Distrib 5.5.31, for debian-linux-gnu (i686) using readline 6.2

Ответ 1

Как описано в Проблемы безопасности с LOAD DATA LOCAL:

Чтобы справиться с этими проблемами, мы изменили, как LOAD DATA LOCAL обрабатывается с MySQL 3.23.49 и MySQL 4.0.2 (4.0. 13 в Windows):

  • По умолчанию все клиенты и библиотеки MySQL в двоичных дистрибутивах скомпилированы с опцией --enable-local-infile, чтобы быть совместимыми с MySQL 3.23.48 и ранее.

  • Если вы создаете MySQL из исходного кода, но не вызываете configure с опцией --enable-local-infile, LOAD DATA LOCAL не может использоваться любой клиент, если он явно не написан для вызова mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0). См. Раздел 20.6.6.49, "mysql_options()" .

  • Вы можете отключить все LOAD DATA LOCAL с сервера, запустив mysqld с опцией --local-infile=0.

  • Для mysql клиент командной строки включите LOAD DATA LOCAL, указав --local-infile[=1] или отключить его с помощью параметра --local-infile=0. Для mysqlimport локальная загрузка файла данных по умолчанию выключена; включите его с параметром --local или -L. В любом случае, успешное использование локальной нагрузки требует, чтобы сервер разрешил ее.

  • Если вы используете LOAD DATA LOCAL в сценариях Perl или других программах, которые читают группу [client] из файлов параметров, вы можете добавьте параметр local-infile=1 в эту группу. Однако, чтобы это не создавало проблем для программ, которые не понимают local-infile, укажите его с помощью префикса loose-:

    [client]
    loose-local-infile=1
    
  • Если LOAD DATA LOCAL отключен, либо на сервере, либо на клиенте, клиент, который пытается выдать такой оператор, получает следующее сообщение об ошибке:

    ERROR 1148: The used command is not allowed with this MySQL version

Ответ 2

Обходной путь для этого - изменить командную строку mysql -e, чтобы передать аргумент --local-infile=1 следующим образом:

mysql --local-infile=1 -u username -p `

Затем запустите команду LOAD DATA LOCAL INFILE еще раз.

Ответ 3

local-infile должен быть включен как на сервере, так и на клиенте. Вы можете сделать это, добавив local-infile = 1 в соответствующий раздел в каждом конце файла my.cnf (Unix) или my.ini (Windows). Например, на клиенте:

[client]
local-infile = 1

Вы также можете включить это во время выполнения на сервере, установив системную переменную local_infile:

SET GLOBAL local_infile=1;

Однако вам все равно нужно включить его на клиенте. Вы можете сделать это во время выполнения, добавив параметр командной строки в команду mysql:

mysql --local-infile=1 ...

Если вы используете Amazon Web Services RDS, вы можете настроить параметры сервера, отредактировав или создав группу параметров. Найдите параметр local_infile. Возможно, вам придется перезагрузить сервер после внесения изменений.

Ответ 4

Я предполагаю, что ваш сервер MySQL не поддерживает LOAD DATA LOCAL. См. Этот раздел документации MySQL:

Если LOAD DATA LOCAL отключено, либо на сервере, либо на клиенте, клиент, который пытается выдать такой оператор, получает следующее сообщение об ошибке:

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

Вот ссылка на страницу, которую я получил от:

http://dev.mysql.com/doc/refman/5.5/en/load-data-local.html