我遇到了这样的问题:错误代码:1290。MySQL服务器正在运行--secure-file-priv选项,因此无法执行此语句 当我尝试执行MySQL语句时(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'
然后它有效。此外,在重新安装MySQL服务器之前,INTO OUTFILE xxx
的相同语句实际上有效。
有人有想法如何处理这个错误吗?
答案 0 :(得分:47)
快速回答,不需要您编辑任何配置文件(并且可以在其他操作系统以及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
打开此文件我可以看到在这个新版本的MySQL Server中添加了secure-file-priv
选项并带有默认值:
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'
答案 1 :(得分:4)
如果您更改了my.ini
并重新启动mysql
但仍然出现此错误,请检查您的文件路径并将"\"
替换为"/"
。
我在更换后解决了问题。
答案 2 :(得分:1)
我必须设置
C:\ProgramData\MySQL\MySQL Server 8.0/my.ini secure-file-priv=""
当我用secure-file-priv
注释一行时,secure-file-priv为null,因此我无法下载数据。
答案 3 :(得分:-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 ',';