一、问题描述
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