Как я должен решать --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"; чтобы увидеть каталог, который был настроен.

у вас есть два варианта:

  1. переместить файл в каталог, указанный secure-file-priv.
  2. отключить 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):

  1. остановите службу сервера MySQL, перейдя в services.msc.
  2. на C:\ProgramData\MySQL\MySQL Server 5.6 (ProgramData была скрытая папка в моем случае).
  3. открыть my.ini файл в блокноте.
  4. Поиск "secure-file-priv".
  5. прокомментируйте строку, добавив " # " в начале строки.
  6. сохранить файл.
  7. запустите службу сервера 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" чтобы решить эту проблему, я сделал следующее.

  1. в Windows search (внизу слева) я набрал "powershell".
  2. щелкните правой кнопкой мыши powershell и запустите его как администратор.
  3. переход к файлу bin сервера. (C:\Program Files\MySQL\MySQL Server 5.6\bin);
  4. наберется ./тузды
  5. нажмите "enter"

сервер запустился, как и ожидалось.