Как мне решить --secure-file-priv в MySQL?
Я изучаю MySQL и пытаюсь использовать предложение LOAD DATA
. Когда я использовал его, как показано ниже:
LOAD DATA INFILE "text.txt" INTO table mytable;
Я получил следующую ошибку:
Сервер MySQL работает с параметром --secure-file-priv, поэтому он не может выполнить этот оператор
Как решить эту ошибку?
Я проверил еще один вопрос по тому же сообщению об ошибке, но все же не смог найти решение.
Я использую MySQL 5.6
Ответы
Ответ 1
Он работает по назначению. Ваш MySQL-сервер был запущен с помощью - secure-file-priv, который в основном ограничивает, из каких каталогов вы можете загружать файлы с помощью LOAD DATA INFILE
.
Вы можете использовать SHOW VARIABLES LIKE "secure_file_priv";
, чтобы увидеть каталог, который был настроен.
У вас есть два варианта:
- Переместите файл в каталог, указанный
secure-file-priv
.
- Отключить
secure-file-priv
. Это должно быть удалено из запуска и не может быть изменено динамически. Для этого проверьте параметры запуска MySQL (в зависимости от платформы) и my.ini.
Ответ 2
У меня была такая же проблема. Наконец, я решил использовать параметр LOCAL
в команде
LOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;
Вы можете найти более подробную информацию здесь http://dev.mysql.com/doc/refman/5.7/en/load-data.html
Если указан LOCAL, файл считывается клиентской программой на клиентского хоста и отправляется на сервер. Файл может быть указан как полный имя пути, чтобы указать его точное местоположение. Если задано как относительный путь имя, имя интерпретируется относительно каталога, в котором была запущена клиентская программа.
Ответ 3
В Ubuntu 14 и Mysql 5.5.53 этот параметр, по-видимому, включен по умолчанию. Чтобы отключить его, вам нужно добавить secure-file-priv = ""
в файл my.cnf в группе конфигурации mysqld. например: -
[mysqld]
secure-file-priv = ""
Ответ 4
Я работаю над MySQL5.7.11 в Debian, команда, которая работала для меня, чтобы увидеть каталог:
mysql> SELECT @@global.secure_file_priv;
Ответ 5
Если файл является локальным для вашей машины, используйте ЛОКАЛЬНЫЙ в вашей команде
LOAD DATA LOCAL INFILE "text.txt" INTO table mytable;
Ответ 6
Вот что сработало для меня в Windows 7, чтобы отключить secure-file-priv
(вариант # 2 из ответа vhu):
- Остановите службу сервера MySQL, зайдя в
services.msc
. - Перейдите в
C:\ProgramData\MySQL\MySQL Server 5.6
(ProgramData
была скрытой папкой в моем случае). - Откройте файл
my.ini
в блокноте. - Ищите "secure-file-priv".
- Прокомментируйте строку, добавив "#" в начале строки. Для MySQL Server 5.7.16 и выше комментирование не будет работать. Вы должны установить пустую строку, например, такую:
secure-file-priv=""
- Сохраните файл.
- Запустите службу сервера MySQL, зайдя в
services.msc
.
Ответ 7
@vhu
Я сделал SHOW VARIABLES LIKE "secure_file_priv";
и он возвратил C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\
поэтому, когда я подключил его, он все равно не работал.
Когда я обратился к файлу my.ini напрямую, я обнаружил, что путь отформатирован немного по-другому: C: /ProgramData/MySQL/MySQL Server 8.0/Uploads
Затем, когда я с этим справился, это сработало. Единственная разница заключается в направлении слешей.
Ответ 8
У меня была такая же проблема с "secure-file-priv" . Комментирование в .ini файле не сработало и не перемещало файл в директорию, указанную "secure-file-priv" .
Наконец, как предположил dbc, создание "secure-file-priv" равным пустой строке. Поэтому, если кто-то застрял после того, как попробовал ответы выше, мы надеемся, что это поможет.
Ответ 9
То, что сработало для меня:
- Поместите свой файл в папку, указанную в
secure-file-priv
.
Чтобы найти этот тип:
mysql> показывать переменные типа "secure_file_priv";
- Проверьте, есть ли у вас
local_infile = 1
.
Сделайте это, набрав:
mysql> показывать переменные типа "local_infile";
Если вы получаете:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | OFF |
+---------------+-------+
Затем установите его на один набор:
mysql> set global local_infile = 1;
- Укажите полный путь к вашему файлу. В моем случае:
mysql> загрузить данные файла "C: /ProgramData/MySQL/MySQL Server 8.0/Uploads/file.txt" в тест таблицы;
Ответ 10
У меня были всевозможные проблемы. Я менял my.cnf и всевозможные сумасшедшие вещи, которые пытались показать другие версии этой проблемы.
Что сработало для меня:
Ошибка, которую я получал
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Я смог исправить это, открыв /usr/local/mysql/support -files/mysql.server и изменив следующую строку:
$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=$?
к
$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=$?
Ответ 11
У меня была эта проблема в Windows 10. "-secure-file-priv в MySQL". Чтобы решить эту проблему, я сделал следующее.
- В окне поиска (внизу слева) я набрал "powershell".
- Щелкните правой кнопкой мыши на powershell и запустите как admin.
- Переместится в файл bin сервера. (C:\Program Files\MySQL\MySQL Server 5.6\bin);
- Типированный. /mysqld
- Хит "enter"
Сервер запускается, как ожидалось.
Ответ 12
MySQL использует эту системную переменную, чтобы контролировать, куда вы можете импортировать файлы
mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | NULL |
+------------------+-------+
Так что проблема в том, как изменить системные переменные, такие как secure_file_priv
.
- выключение
mysqld
-
sudo mysqld_safe --secure_file_priv=""
теперь вы можете увидеть вот так:
mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | |
+------------------+-------+
Ответ 13
Если вы работаете в Ubuntu, вам также может понадобиться настроить Apparmor, чтобы разрешить MySQL писать в вашу папку, например, здесь моя конфигурация:
Добавьте эту строку в файл /etc/apparmor.d/usr.sbin.mysqld:
/var/lib/mysql-files/* rw
Затем добавьте эти 2 строки конфигурации в разделы /etc/mysql/my.cnf:
[client]
loose-local-infile = 1
[mysqld]
secure-file-priv = ""
Вот мой SQL:
select id from blahs into outfile '/var/lib/mysql-files/blahs';
Это сработало для меня. Удачи!
Ответ 14
Для версии MySQL 8.0 вы можете сделать это:
- mysql.server stop
- mysql.server start --secure-file-priv = ''
У меня это работало на Mac High Sierra
Ответ 15
Подробный пример того, как проверить secure_file_priv, предоставить пользователя и выбрать в выходной файл yippeecode.com