【1】Mysql命令load data infile 執行權限問題html
工做中,常常會遇到往線上環境mysql數據庫批量導入源數據的場景。mysql
針對這個場景問題,mysql有一個很高效的命令:load data infilesql
經過load data infile命令將data_file文件數據導入表中。數據庫
固然,由於mysql數據庫權限限制的問題,分爲如下幾種狀況:安全
(1)root用戶(特指mysql的root,非Linux系統的root)this
在mysql server部署機器經過load data infile命令導入數據時,只要文件路徑指定正確,通常不會有問題。spa
若是導入失敗,請參見隨筆《Mysql 導入文件提示 --secure-file-priv option 問題》操作系統
(2)非root用戶在mysql server部署機器經過load data infile命令導入數據時,報錯:server
ERROR 1045 (28000): Access denied for user 'xxx'@'xxx' (using password: YES)htm
這個錯誤通常是由於非root用戶沒有FILE Privilege權限,查詢當前用戶權限可參見隨筆《Mysql 用戶及權限》
兩種解決方案:
[1] 命令加local參數。用load data local infile 'filename' into table 來導入數據(強烈推薦使用)
[2] 爲當前用戶開通權限。給當前用戶開通FILE Privilege權限時,注意:
FILE權限與SELECE/DELETE/UPDATE等不一樣,後者是能夠具體指定到某個db的某個表的,而FILE則是全局的,
即只能經過grant FILE on *.* to 'abcde'@'%'才能使FILE權限對全部db的全部tables生效。
經過grant all on db.* to 'abcde'@'%'不能使指定的user在指定的db上具備FILE權限。
根據最小權限原則(操做系統安全的概念),這個方法並不安全,故不推薦使用。
(3)非root用戶從client機器load data local infile至remote mysql server時,報錯:
ERROR 1148 (42000): The used command is not allowed with this MySQL version
可能緣由(from mysql reference manual):
If LOAD DATA LOCAL is disabled, either in the server or the client, a client that attempts to issue such a statement receives the following error message:
ERROR 1148: The used command is not allowed with this MySQL version
可見,出於安全考慮,默認是不容許從client host遠程經過load data命令導數據的
解決辦法:
For the mysql command-line client, enable LOAD DATA LOCAL by specifying the --local-infile[=1]option, or disable it with the --local-infile=0 option
也即,在須要從client host導人數據的場景下,當登錄mysql時,需用--local-infile[=1]顯式指定參數,典型命令形式爲:
mysql --local-infile -u user -p passwd
登錄成功後,再執行load data infile 'filename' into table便可。
Good Good Study, Day Day Up.
順序 選擇 循環 總結