Как я должен решать --secure-file-priv в MySQL?
Я изучаю MySQL и пытался использовать LOAD DATA
предложения. Когда я использовал его, как показано ниже:
LOAD DATA INFILE "text.txt" INTO table mytable;
Я получил следующую ошибку:
сервер MySQL работает с параметром --secure-file-priv, поэтому он не может выполнить этот оператор
Как мне справиться с этой ошибкой?
Я проверил еще один вопрос о том же сообщении об ошибке, но все еще не могу найти решение.
Я использую MySQL 5.6
9 ответов
он работает по назначению. Ваш сервер MySQL был запущен с --secure-file-priv опция, которая в основном ограничивает, из каких каталогов вы можете загружать файлы с помощью LOAD DATA INFILE
.
вы можете использовать SHOW VARIABLES LIKE "secure_file_priv";
чтобы увидеть каталог, который был настроен.
у вас есть два варианта:
- переместить файл в каталог, указанный
secure-file-priv
. - отключить
secure-file-priv
. Это должно быть удалено из запуска и не может быть изменено динамически. Для этого проверьте параметры запуска MySQL (в зависимости от платформы) и my.ini.
у меня была та же проблема. Я, наконец, решил использовать в команде
LOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;
Вы можете найти более подробную информацию здесь http://dev.mysql.com/doc/refman/5.7/en/load-data.html
Если указан LOCAL, файл считывается клиентской программой на клиентский хост и отправляется на сервер. Файл может быть предоставлен как полный имя пути, чтобы указать его точное местоположение. Если задан относительный путь имя интерпретируется относительно каталога, в котором запущена клиентская программа.
на Ubuntu 14 и Mysql 5.5.53 этот параметр, похоже, включен по умолчанию. Чтобы отключить его, вам нужно добавить secure-file-priv = ""
в свой личный.файл cnf в группе конфигурации mysqld. например:-
[mysqld]
secure-file-priv = ""
Я работаю над MySQL5.7.11 в Debian команда, которая работала для меня, чтобы увидеть каталог:
mysql> выберите @@global.secure_file_priv;
вот что работает для меня в Windows 7 отключить secure-file-priv
(Вариант № 2 от ответ vhu):
- остановите службу сервера MySQL, перейдя в
services.msc
. - на
C:\ProgramData\MySQL\MySQL Server 5.6
(ProgramData
была скрытая папка в моем случае). - открыть
my.ini
файл в блокноте. - Поиск "secure-file-priv".
- прокомментируйте строку, добавив " # " в начале строки.
- сохранить файл.
- запустите службу сервера MySQL, перейдя в
services.msc
.
для MySQL Server 5.7.16 и выше, пожалуйста, обратитесь к комментарию dbc ниже.
Если файл является локальным для вашего компьютера, используйте местные в команде
LOAD DATA LOCAL INFILE "text.txt" INTO table mytable;
У меня была такая же проблема с "secure-file-priv". Комментируя в .ini-файл не работал и не перемещался в каталог, указанный в "secure-file-priv".
наконец, как предложил dbc, создание "secure-file-priv", равного пустой строке, работало. Так что если кто-то застрял после попытки ответов выше, надеюсь это поможет.
у меня были всякие проблемы с этим. Я менял свой.cnf и всевозможные сумасшедшие вещи, которые пытались показать другие версии этой проблемы.
что сработало для меня:
ошибки я получаю
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
я смог исправить это, открыв /usr/local/mysql/support-files / mysql.сервер и изменение следующей строки:
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" -- $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
to
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --secure-file-priv="" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
У меня была эта проблема в windows 10. "--secure-file-priv in MySQL" чтобы решить эту проблему, я сделал следующее.
- в Windows search (внизу слева) я набрал "powershell".
- щелкните правой кнопкой мыши powershell и запустите его как администратор.
- переход к файлу bin сервера. (C:\Program Files\MySQL\MySQL Server 5.6\bin);
- наберется ./тузды
- нажмите "enter"
сервер запустился, как и ожидалось.