错误代码:1290,MySQL服务器正在使用--secure-file-priv选项运行,因此无法执行此语句

mpgws1up  于 2023-01-01  发布在  Mysql
关注(0)|答案(5)|浏览(284)

我遇到了这样一个问题:错误代码: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相同的语句实际上工作了。
有人知道如何处理这个错误吗?

evrscar2

evrscar21#

一个不需要您编辑任何配置文件(并且可以在其他操作系统以及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上),查看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 = ""以禁用默认设置)。
或者,您可以尝试将输出保存到允许的文件夹中(位置可能因安装而异):

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';
ekqde3dh

ekqde3dh2#

如果您更改了my.ini并重新启动了mysql,但仍然出现此错误,请检查您的文件路径并将"\"替换为"/"

2uluyalo

2uluyalo3#

我得把

C:\ProgramData\MySQL\MySQL Server 8.0/my.ini  secure-file-priv=""

当我用secure-file-priv注解行时,secure-file-priv为空,我无法下载数据。

deyfvvtc

deyfvvtc4#

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
    • TL; DR**

使用双反斜杠指定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的代码

SELECT * FROM shippers INTO OUTFILE 'report.csv'

给出错误1290
执行OP的代码

SELECT * FROM shippers INTO OUTFILE 'report.csv'
    FIELDS TERMINATED BY '#' ENCLOSED BY '"' LINES TERMINATED BY '\n';

给出错误1290
接下来,将my.ini更改为secure-file-priv="",并使用打开服务〉停止服务MySQL80〉然后启动服务MySQL80重新启动MySQL,然后关闭并重新打开Workbench。
secure-file-priv现在已关闭

SHOW VARIABLES LIKE "secure_file_priv";

Variable_name, Value

'secure_file_priv', ''

执行OP的代码

SELECT * FROM shippers INTO OUTFILE 'report.csv'

文件report. csv在C:\ProgramData\MySQL\MySQL Server 8.0\Data\northwind中生成
northwind是数据库名称
输出文件是制表符分隔的,Excel不将其识别为. CSV文件,而是将其呈现为单列

"1  Speedy Express  (503) 555-9831"
"2  United Package  (503) 555-3199"
"3  Federal Shipping    (503) 555-9931"
"1  Speedy Express  (503) 555-9831"
"2  United Package  (503) 555-3199"
"3  Federal Shipping    (503) 555-9931"

执行OP的代码

SELECT * FROM shippers INTO OUTFILE 'report.csv'
    FIELDS TERMINATED BY '#' ENCLOSED BY '"' LINES TERMINATED BY '\n';

C:\ProgramData\MySQL\MySQL Server 8.0\Data\northwind中生成文件报告. csv
输出文件如SQL代码中所指定,文本字段用引号括起来,并以#-分隔

1#"Speedy Express"#"(503) 555-9831"
2#"United Package"#"(503) 555-3199"
3#"Federal Shipping"#"(503) 555-9931"
1#"Speedy Express"#"(503) 555-9831"
2#"United Package"#"(503) 555-3199"
3#"Federal Shipping"#"(503) 555-9931"

接下来,在my.ini中设置secure_file_priv="C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\"并重新启动MySQL和Workbench
执行OP的代码

SELECT * FROM shippers INTO OUTFILE 'report.csv'

错误1290,因为"C:\ProgramData\MySQL\MySQL Server 8.0\Data\northwind"不是安全文件输出文件夹。
执行以下代码

SELECT * FROM shippers INTO OUTFILE "C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\report.csv"

"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads"中生成文件报告. csv

w46czmvw

w46czmvw5#

上面的代码导出的数据没有标题列,这很奇怪。下面是如何做到这一点。你必须合并两个文件后,虽然使用文本编辑器。

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 ',';

相关问题