我遇到了这样一个问题:错误代码: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
相同的语句实际上工作了。
有人知道如何处理这个错误吗?
5条答案
按热度按时间evrscar21#
一个不需要您编辑任何配置文件(并且可以在其他操作系统以及Windows上工作)的快速答案是,使用以下命令查找允许保存到的目录:
然后确保在
SELECT
语句的INTO OUTFILE
子句中使用该目录:原答复
从MySQL 5.6.25升级到5.6.26后,我遇到了同样的问题。
在我的示例中(在Windows上),查看MySQL 56 Windows服务时,我发现服务启动时使用的选项/设置文件是
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini
在linux上,两个最常见的位置是
/etc/my.cnf
或/etc/mysql/my.cnf
。打开此文件,我可以看到
secure-file-priv
选项已添加到新版本MySQL Server的[mysqld]
组下,默认值为:secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.6/Uploads"
您可以对此进行注解(如果您在非生产环境中),或者尝试更改设置(最近我不得不设置
secure-file-priv = ""
以禁用默认设置)。或者,您可以尝试将输出保存到允许的文件夹中(位置可能因安装而异):
更常见的是使用
FIELDS TERMINATED BY ','
以逗号分隔值。请参见下面的示例(也显示了Linux路径):ekqde3dh2#
如果您更改了
my.ini
并重新启动了mysql
,但仍然出现此错误,请检查您的文件路径并将"\"
替换为"/"
。2uluyalo3#
我得把
当我用
secure-file-priv
注解行时,secure-file-priv为空,我无法下载数据。deyfvvtc4#
使用双反斜杠指定secure-file-priv文件夹,并使用双反斜杠显式指定输出文件,这样就解决了OP的原始问题。
较长的答案如下-在Windows 11 64位操作系统上,基于x64的处理器,内部版本号22621.963,版本22H2,使用Web安装程序. MSI文件作为开发人员配置安装MySQL。
SELECT VERSION();
给出"8.0.31"帮助〉关于工作台提供
Version 8.0.31 build 2235049 CE 64 bits
Windows 11上的默认文件名为"my.ini",格式为
C:\ProgramData\MySQL\MySQL Server 8.0
C:\ProgramData
是隐藏文件夹。my.ini中的缺省规范为
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"
执行
SHOW VARIABLES LIKE "secure_file_priv";
复制并粘贴该行,得到
'secure_file_priv', 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\'
在Workbench中渲染为
'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\'
请注意这些文件夹规范的反斜杠、正斜杠和双反斜杠语法
执行OP的代码
给出错误1290
执行OP的代码
给出错误1290
接下来,将my.ini更改为
secure-file-priv=""
,并使用打开服务〉停止服务MySQL80〉然后启动服务MySQL80重新启动MySQL,然后关闭并重新打开Workbench。secure-file-priv
现在已关闭执行OP的代码
文件report. csv在
C:\ProgramData\MySQL\MySQL Server 8.0\Data\northwind
中生成northwind
是数据库名称输出文件是制表符分隔的,Excel不将其识别为. CSV文件,而是将其呈现为单列
执行OP的代码
在
C:\ProgramData\MySQL\MySQL Server 8.0\Data\northwind
中生成文件报告. csv输出文件如SQL代码中所指定,文本字段用引号括起来,并以#-分隔
接下来,在my.ini中设置
secure_file_priv="C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\"
并重新启动MySQL和Workbench执行OP的代码
错误1290,因为
"C:\ProgramData\MySQL\MySQL Server 8.0\Data\northwind"
不是安全文件输出文件夹。执行以下代码
在
"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads"
中生成文件报告. csvw46czmvw5#
上面的代码导出的数据没有标题列,这很奇怪。下面是如何做到这一点。你必须合并两个文件后,虽然使用文本编辑器。