MySQL报错:ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement


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可以设置的值有哪些呢?其有三个值可以配置,如下:

  1. If empty, the variable has no effect. This is not a secure setting. 【如果此配置项值为空,则表示没有安全设置】
  2. 如果设置为目录名,则服务器将限制导入和导出操作,使其仅适用于该目录中的文件。该目录必须存在;服务器将不会创建它。
  3. 如果设置为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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM