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