一个快速的答案是,不需要您编辑任何配置文件(并且适用于其他操作系统以及 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
clause:
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
or /etc/mysql/my.cnf
.
打开这个文件我可以看到secure-file-priv
选项已添加到[mysqld]
在此新版本的 MySQL Server 中,组具有默认值:
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.6/Uploads"
您可以对此进行评论(如果您处于非生产环境中),或者尝试更改设置(最近我必须设置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'
使用逗号分隔值更常见FIELDS TERMINATED BY ','
。请参阅下面的示例(还显示 Linux 路径):
SELECT *
FROM table
INTO OUTFILE '/var/lib/mysql-files/report.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
ESCAPED BY ''
LINES TERMINATED BY '\n';