【MySQL實踐經驗】LOAD DATA INFILE報錯ERROR 1148 (42000)或ERROR 1045 (28000)的解決辦法 在部署在不同機器上的mysql數據庫之間導數據時,load data infile是一個很高效的命令,從host1的db1.table1通過select ... into outfile將數據導入文本文件,然後通過load data infile將數據導入host2的db2.table1。 使用過程中碰到一些典型問題及並最終找到解決方法。作為筆記,記錄與此。 1. root用戶(這裡只mysql的root,非Linux系統的root)在mysql server部署機器通過load data infile命令導入數據時,只要文件路徑指定正確,一般不會有問題 2. 非root用戶在mysql server部署機器通過load data infile命令導入數據時,報錯: ERROR 1045 (28000): Access denied for user 'xxx'@'xxx' (using password: YES) 可能原因:這個一般是因為非root用戶沒有FILE Privilege,可以通過show grants查看當前登陸用戶的權限,也可以通過select mysql.user查看某用戶的權限,一般情況下,normal user是無FILE權限的 解決辦法: 1)命令加local參數,用load data local infile 'filename' into table xxx.xxx來導數據(推薦使用) 2)給normal user開通FILE Privilege,注意:FILE權限與SELECE/DELETE/UPDATE等不同,後者是可以具體指定到某個db的某個表的,而FILE則是全局的,即只能通過grant FILE on *.* to 'xxx'@'xxx'才能使FILE權限對所有db的所有tables生效。通過grant all on db.* to 'xxx'@'xxx'不能使指定的user在指定的db上具有FILE權限 根據最小權限原則(操作系統安全的概念),這個方法並不安全 3)修改.my.cnf中的配置,具體方法見官網 http://www.markhneedham.com/blog/2011/01/18/mysql-the-used-command-is-not-allowed-with-this-mysql-version/ 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 LOCALis disabled, either in the server or the client, a client that attempts to issue such a statement receives the fol-lowing 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 -ppasswd 登陸成功後,執行load data infile 'filename' into table xxx.xxx即可