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