1.报错
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
接下来,我们就一起来看看如何解决这个问题:在我们安装完 MySQL 之后,会自动生成一个名为 my.ini
的配置文件,该文件记录了 MySQL 的所有默认配置,如端口号、默认字符集、默认存储引擎等等。而这个配置文件,则位于隐藏文件夹ProgramData
中,至于如何找到该隐藏文件夹,具体可以参考详述查看 MySQL 数据文件存储位置的方法。
此外,我们也可以通过命令查看secure-file-priv
的当前值:
show variables like '%secure%';
如上图所示,我设置的
secure-file-priv
值为D:/CoderLife/testMySQL
,而 MySQL 默认的值为:secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.7/Uploads"
我们可以通过打开
my.ini
配置文件进行查看及修改如上图所示,我注释了 MySQL 的默认值,并修改成自己指定的路径。实际上,在我们修改此配置文件的内容之后,例如修改了
secure-file-priv
的默认值,要想使其生效,我们必须关闭 MySQL 然后重新启动。在这里,需要我们注意的是:关闭 MySQL 并不是指简单的用exit
命令退出 MySQL 或者关闭 MySQL 窗口,而是关闭 MySQL 服务,然后重新启动服务。至于如何开启和关闭 MySQL 服务,具体可以参考详述 MySQL 数据库输入密码后闪退的问题及解决方案。
2.原因
什么是secure-file-priv,按照字面意思,就是安全的文件权限(pri -> privileges),那么,这个secure-file-priv又是什么玩意儿呢?查看mysql referman,如下:
此选项设置secure_file_priv系统变量,该变量用于限制数据
导入和导出操作的效果,例如由LOAD DATA和SELECT…INTO
OUTFILE语句以及LOAD_FILE()函数执行的操作。
【译:这个选项设置系统变量: secure_file_priv,这个变量被用于限制数据导入的导出操作,诸如执行LOAD DATA以及SELECT ... INTO OUTFILE操作以及LOAD_FILE()函数。 】
那么这个secure_file_priv可以设置的值有哪些呢?其有三个值可以配置,如下:
- If empty, the variable has no effect. This is not a secure setting. 【如果此配置项值为空,则表示没有安全设置】
- 如果设置为目录名,则服务器将限制导入和导出操作,使其仅适用于该目录中的文件。该目录必须存在;服务器将不会创建它。
- 如果设置为NULL,则服务器将禁用导入和导出操作。从MySQL 5.7.6开始允许使用此值
查看mysql的该变量值,如下
mysql> show variables like '%secure_file_priv%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | NULL |
+------------------+-------+
1 row in set, 1 warning (0.00 sec)
根据上述的NULL
值,可以看到是不允许导出(入)到文件
3.解决办法
在配置文件中,设置secure-file-priv
为某个路径即可,如下:
mysql> show variables like '%secure_file_priv%';
+------------------+--------------------------------------------------+
| Variable_name | Value |
+------------------+--------------------------------------------------+
| secure_file_priv | D:\Program Files\MySQL\MySQL Server 5.7\outfile\ |
+------------------+--------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
4. 结果
再次执行上述的SQL,如下:
mysql> select * from student into outfile 'D:/Program Files/MySQL/MySQL Server 5.7/outfile/student.csv';
Query OK, 2 rows affected (0.00 sec)
————————————————
版权声明:本文为CSDN博主「LawsonAbs」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liu16659/java/article/details/84581394