Бърз отговор, който не изисква от вас да редактирате никакви конфигурационни файлове (и работи на други операционни системи, както и на 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 на Windows ми показва, че файлът с опции/настройки, който се използва при стартиране на услугата, е C:\ProgramData\MySQL\MySQL Server 5.6\my.iniкод>
В Linux двете най-често срещани местоположения са /etc/my.cnf
или /etc/mysql/my.cnf
.
Отваряйки този файл, виждам, че secure-file-priv
опцията е добавена под [mysqld]
група в тази нова версия на MySQL Server със стойност по подразбиране:
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.6/Качвания"
Можете да коментирате това (ако сте в непроизводствена среда) или да експериментирате с промяна на настройката (наскоро трябваше да задам secure-file-priv =""
за да деактивирате по подразбиране). Не забравяйте да рестартирате услугата, след като направите промени.
Като алтернатива можете да опитате да запазите изхода си в разрешената папка (местоположението може да варира в зависимост от вашата инсталация):
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'
По-често се срещат стойности, разделени със запетая, като се използва ПОЛЕТА, ПРЕКРАЩАНИ С ','
. Вижте по-долу за пример (също показващ Linux път):
SELECT *
FROM table
INTO OUTFILE '/var/lib/mysql-files/report.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
ESCAPED BY ''
LINES TERMINATED BY '\n';