Код ошибки: 1290. Сервер MySQL работает с параметром --secure-file-priv, поэтому он не может выполнить этот оператор

Я столкнулся с такой проблемой: Код ошибки: 1290. Сервер MySQL работает с параметром -secure-file-priv, поэтому он не может выполнить этот оператор когда я пытался выполнить свою инструкцию sql (Windows):

SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE 'report.csv'
    FIELDS TERMINATED BY '#'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'

Когда я выполняю его без:

INTO OUTFILE 'report.csv'
    FIELDS TERMINATED BY '#'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'

Тогда он работает. Кроме того, тот же оператор с INTO OUTFILE xxx работает до того, как я переустановил сервер MySQL.

У кого-нибудь есть идеи, как справиться с этой ошибкой?

Ответ 1

Быстрый ответ, который не требует, чтобы вы редактировали любые файлы конфигурации (и работали как в других операционных системах, так и в Windows), просто найдите каталог, который вы можете сохранить для использования:

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.06 sec)

И затем убедитесь, что вы используете этот каталог в операторе SELECT "INTO OUTFILE:

SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE '/var/lib/mysql-files/report.csv'
    FIELDS TERMINATED BY '#'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'

Оригинальный ответ

У меня была такая же проблема с момента обновления с MySQL 5.6.25 до 5.6.26.

В моем случае (в Windows) просмотр службы MySQL56 показывает мне, что файл параметров/настроек, который используется при запуске службы, - C:\ProgramData\MySQL\MySQL Server 5.6\my.ini

Служба MySQL56

Открывая этот файл, я вижу, что опция secure-file-priv была добавлена ​​в эту новую версию MySQL Server со значением по умолчанию:

secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.6/Uploads"

Вы можете прокомментировать это (если вы находитесь в непроизводственной среде) или поэкспериментировать с изменением настройки. Не забудьте перезапустить службу после внесения изменений.

В качестве альтернативы вы можете попытаться сохранить свой вывод в разрешенной папке (расположение может отличаться в зависимости от вашей установки):

SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.6/Uploads/report.csv'
    FIELDS TERMINATED BY '#'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'

Ответ 2

Если вы изменили my.ini и перезапустили mysql, и вы все равно получите эту ошибку, проверьте путь к файлу и замените "\" на "/". Я решил решить проблему после замены.

Ответ 3

Приведенный выше код экспортирует данные без столбцов заголовков, которые являются странными. Вот как это сделать. Вы должны объединить эти два файла позже, используя текстовый редактор.

SELECT column_name FROM information_schema.columns WHERE table_schema = 'my_app_db' AND table_name = 'customers' INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.6/Uploads/customers_heading_cols.csv' FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY ',';