MySQL导出查询数据出现--secure-file-priv选项问题

一、问题描述

Windows平台的MySQL5.7.12版本使用以下命令导出查询结果到Excel文件时,会出现问题

select sid, sname, age from student
into outfile 'D:/Files/student.xlsx';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

二、查明原因

通过查阅官方文档:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html,可以知道导出导入文件的相关操作会受到全局变量secure-file-priv的限制,如load data命令、select ... into outfile ...语句、LOAD_FILE()函数等。

具体怎么影响如文档所说:

secure_file_priv may be set as follows:

If empty, the variable has no effect. This is not a secure setting.

If set to the name of a directory, the server limits import and export operations to work only with files in that directory. The directory must exist; the server will not create it.

If set to NULL, the server disables import and export operations.

所以,估计是secure_file_priv的值被设置为null的原因

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+
1 row in set (0.00 sec)

三、解决问题

修改配置文件上的secure_file_priv值

1、首先找到MySQL在使用的配置文件my.ini

mysql> select @@basedir;
+----------------------------------------+
| @@basedir                              |
+----------------------------------------+
| D:\Software\MySQL\mysql-5.6.43-winx64\ |
+----------------------------------------+
1 row in set (0.00 sec)

my.ini就在安装目录下,不过有的人有可能安装MySQL时的配置问题,导致MySQL读的不是安装路径下的my.ini文件(如下面链接所示),这种情况只要修改那个配置文件即可。

https://blog.csdn.net/qq_41604269/article/details/80780581

2、打开my.ini

secure_file_priv=

也就是设置为对文件的导入导出不做任何限制

3、重启MySQL服务

在cmd下依次执行以下命令

net stop mysql
net start mysql

此时,再执行原先的导出文件命令就没有问题了

 

参考链接:

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

https://stackoverflow.com/questions/32737478/how-should-i-tackle-secure-file-priv-in-mysql

你可能感兴趣的:(MySQL,MySQL,导出文件)