溯源:mysql導入導出文件報錯ERROR 1290 (HY000):–secure-file-priv
編輯:狂族晨曦 來源:系統運維,經驗雜筆 日期:2017-08-12 閱讀: 4,438 次 1 條評論 » 百度已收錄
近期遇到mysql導出文件的錯誤,之前遇到這個錯誤,因為需要導出的數據少,所以直接將結果手動復制。
mysql> select * from childrenzone_order into outfile '/tmp/test.txt' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n'; ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
但后來遇到大量的數據需要導出,簡單的復制就不能滿足需求了。
進行百度,發現解決方法很簡單,在配置文件里增加配置,重啟Mysql即可。只是,生產環境中,數據庫是不能隨意重啟的,所以這個問題就很麻煩了。為了避免往后出現這種問題,先森覺得有必要研究清楚這個問題究竟影響了多少Mysql。
解決方法
首先是解決此類問題的方法,通過secure_file_priv 來完成對導入|導出的限制。
secure_file_priv是在 /etc/my.cnf 中的[mysqld]下配置,共有三種限制方式。
1、限制mysqld 不允許導入 | 導出:
secure_file_priv = null
2、限制mysqld 的導入 | 導出 只能發生在指定目錄下,如/tmp目錄:
secure_file_priv = /tmp
3、不對mysqld 的導入 | 導出做限制,有兩種書寫方式:
secure_file_priv = / 或 secure_file_priv =
而查詢secure_file_priv的方式如下:
mysql> show variables like '%secure%';

查詢secure_file_priv變量配置
secure_file_priv變量配置的默認值為“NULL”,也就是默認不允許導入導出。
溯源
雖然知道了解決方法,但是前文也提到過,生產環境的Mysql并不能隨意的重啟,即使有主備。所以,弄明白受到默認禁止導入導出的Mysql版本有哪些就有必要了。
通過查詢官方文檔,先森找到了影響版本,見下圖(點擊放大)。

官方文檔變量介紹
通過上圖可以看到,最后一個被紅框框選的文字:“Before MySQL 5.5.53, this variable is empty by default.(在MySQL 5.5.53,這個變量默認是空的。)”。這個變量在Mysql 5.5.53之后新增了“NULL”的配置,且默認為“NULL”。所以,如果發現自己的Mysql版本是5.5.53以后的,且不想限制導入導出的話,最好把變量的值配置好后擇時重啟Mysql。
另外,上圖還介紹了,secure_file_priv這個變量是全局變量,且不能動態修改。這也是必須寫入配置文件并重啟Mysql的原因。
歷史上的今天:
轉載請注明出處來自http://www.cnidcc.cn/mysql_secure_file_priv.html

川公網安備 51011202000104號
這個厲害,保存備用