溯源:mysql導(dǎo)入導(dǎo)出文件報(bào)錯(cuò)ERROR 1290 (HY000):–secure-file-priv
編輯:狂族晨曦 來源:系統(tǒng)運(yùn)維,經(jīng)驗(yàn)雜筆 日期:2017-08-12 閱讀: 4,487 次 1 條評(píng)論 » 百度已收錄
近期遇到mysql導(dǎo)出文件的錯(cuò)誤,之前遇到這個(gè)錯(cuò)誤,因?yàn)樾枰獙?dǎo)出的數(shù)據(jù)少,所以直接將結(jié)果手動(dòng)復(fù)制。
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
但后來遇到大量的數(shù)據(jù)需要導(dǎo)出,簡(jiǎn)單的復(fù)制就不能滿足需求了。
進(jìn)行百度,發(fā)現(xiàn)解決方法很簡(jiǎn)單,在配置文件里增加配置,重啟Mysql即可。只是,生產(chǎn)環(huán)境中,數(shù)據(jù)庫是不能隨意重啟的,所以這個(gè)問題就很麻煩了。為了避免往后出現(xiàn)這種問題,先森覺得有必要研究清楚這個(gè)問題究竟影響了多少M(fèi)ysql。
解決方法
首先是解決此類問題的方法,通過secure_file_priv 來完成對(duì)導(dǎo)入|導(dǎo)出的限制。
secure_file_priv是在 /etc/my.cnf 中的[mysqld]下配置,共有三種限制方式。
1、限制mysqld 不允許導(dǎo)入 | 導(dǎo)出:
secure_file_priv = null
2、限制mysqld 的導(dǎo)入 | 導(dǎo)出 只能發(fā)生在指定目錄下,如/tmp目錄:
secure_file_priv = /tmp
3、不對(duì)mysqld 的導(dǎo)入 | 導(dǎo)出做限制,有兩種書寫方式:
secure_file_priv = / 或 secure_file_priv =
而查詢secure_file_priv的方式如下:
mysql> show variables like '%secure%';

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

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

川公網(wǎng)安備 51011202000104號(hào)
這個(gè)厲害,保存?zhèn)溆?/p>