首頁  >  文章  >  資料庫  >  mysql5.7匯出資料提示--secure-file-priv選項問題的解決方法

mysql5.7匯出資料提示--secure-file-priv選項問題的解決方法

jacklove
jacklove原創
2018-06-08 15:59:5016216瀏覽

mysql可使用into outfile 參數把表中資料匯出到csv,例如可用以下指令把user表的資料匯出到user.csv

select * from user into outfile '/tmp/user.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n

執行後, user表的資料會匯出到/tmp/user.csv。
參數說明:

into outfile '匯出的目錄和檔案名稱' 
指定匯出的目錄和檔案名稱

fields terminated by '字段間分隔符號' 
定義字段間的分隔符號

optionally enclosed by '字段包圍符' 
定義包圍字段的字元(數值型欄位無效)

lines terminated by '行間分隔符號' 
定義每行的分隔符號 
問題分析

#以上指令在mysql5.6下執行沒有問題,但在mysql5.7下執行則出現了下列錯誤。

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

  查看官方文檔,secure_file_priv參數用於限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()傳到哪個指定目錄。

  • secure_file_priv 為 NULL# 時,表示限制mysqld不允許匯入或匯出。

  • secure_file_priv 為 /tmp 時,表示限制mysqld只能在/tmp目錄中執行匯入匯出,其他目錄不能執行。

  • secure_file_priv 沒有值時,表示不限制mysqld在任意目錄的匯入匯出。

  檢視 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 參數是唯讀參數,不能使用set global指令修改。

mysql> set global secure_file_priv='';
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable

解決方法

開啟my.cnf 或 my.ini,加入下列語句後重新啟動mysql。

secure_file_priv=''

  查看secure_file_priv修改後的值

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+| Variable_name    | Value |
+------------------+-------+| secure_file_priv |       |
+------------------+-------+1 row in set (0.00 sec)

修改後再執行,成功匯出。

';

執行後,user表的資料會匯出到/tmp/user.csv。
參數說明:

into outfile '匯出的目錄和檔案名稱'
指定匯出的目錄和檔案名稱

fields terminated by '字段間分隔符號'
定義字段間的分隔符號

optionally enclosed by '字段包圍符'
定義包圍字段的字元(數值型欄位無效)

lines terminated by '行間分隔符號'
定義每行的分隔符號
問題分析

以上指令在mysql5.6下執行沒有問題,但在mysql5.7下執行則出現了下列錯誤。

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

  查看官方文檔,secure_file_priv參數用於限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()傳送到哪個指定目錄。

  • secure_file_priv 為 NULL 時,表示限制mysqld不允許匯入或匯出。

  • secure_file_priv 為 /tmp 時,表示限制mysqld只能在/tmp目錄中執行匯入匯出,其他目錄不能執行。

  • secure_file_priv 沒有值時,表示不限制mysqld在任意目錄的匯入匯出。

  檢視 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 參數是唯讀參數,不能使用set global指令修改。

mysql> set global secure_file_priv='';
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable

解決方法

開啟my.cnf 或 my.ini,加入下列語句後重新啟動mysql。

secure_file_priv=''

  檢視secure_file_priv修改後的值

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+| Variable_name    | Value |
+------------------+-------+| secure_file_priv |       |
+------------------+-------+1 row in set (0.00 sec)

已修改後再執行,成功匯出。

mysql> select * from user into outfile '/tmp/user.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';
Query OK, 15 rows affected (0.00 sec)

    

#

以上是mysql5.7匯出資料提示--secure-file-priv選項問題的解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn