Как я могу исправить ошибку загрузки 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