今天在導入mysql數據的時(shí)候,出現下面的錯誤:
mysql> load data infile '/root/aaa' into table test fields terminated by ',' lines terminated by '\n';
mysql> ERROR 13 (HY000): Can't get stat of '/root/aaa' (Errcode: 13)
開(kāi)始還以為是/root/aaa文件權限或者是mysql的root用戶(hù)權限的問(wèn)題,后來(lái)想不對呀,mysql的root用戶(hù)是超級用戶(hù),肯定有權限的,那問(wèn)題就出在/root/aaa文件的權限上,后來(lái)把/root/aaa的權限改成777,執行操作后還是不行。
呵呵,原來(lái)是aaa文件所在的文件目錄權限的問(wèn)題,這個(gè)好辦,換到/tmp/aaa,執行上述操作看看:
mysql> load data infile '/tmp/aaa' into table users_groups fields terminated by ',' lines terminated by '\n';
Query OK, 14 rows affected (0.01 sec)
Records: 14 Deleted: 0 Skipped: 0 Warnings: 0
ok,成功了!
之所以要用/tmp目錄的原因是mysql默認使用了/tmp作為臨時(shí)讀寫(xiě)目錄。
mysql> show variables like '%tmpdir%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| slave_load_tmpdir | /tmp |
| tmpdir | /tmp |
+-------------------+-------+
2 rows in set (0.00 sec)
但是將LOAD DATA INFILE
換成
LOAD DATA LOCAL INFILE
OK!
原因分析:
源自Mysql中文手冊:
出于安全原因,當讀取位于服務(wù)器中的文本文件時(shí),文件必須位于數據庫目錄中,或者是全體可讀的。另外,要對服務(wù)器文件使用LOAD DATA INFILE,您必須擁有FILE權限。
如果指定了LOCAL,則文件會(huì )被客戶(hù)主機上的客戶(hù)端讀取,并被發(fā)送到服務(wù)器。文件會(huì )被給予一個(gè)完整的路徑名稱(chēng),以指定確切的位置。
權限問(wèn)題??!
例子:load data infile '/root/1.cvs' replace into table `vas_res_schedule` lines terminated by ' ' (CODE,CHANNELCODE,NAME,STARTDATE,STARTTIME,DURATION,STATUS);ERROR 13 (HY000): Can't get stat of '/root/1.cvs' (Errcode: 13)解決:1:查看當前數據庫用戶(hù)是否有 file 文件權限select File_priv from user where user like '%vas%';File_priv 為 N 時(shí)表示沒(méi)有文件權限,為Y時(shí)是有文件權限的File :權限給予你用LOAD DATA INFILE和SELECT ... INTO OUTFILE語(yǔ)句讀和寫(xiě)服務(wù)器上的文件,任何被授予這個(gè)權限的用戶(hù)都能讀或寫(xiě)MySQL服務(wù)器能讀或寫(xiě)的任何文件。為當前用戶(hù)賦予File_priv的權限,就ok了。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。