2011-12-12 88 views
7

我正在運行MySQL我的Ubuntu機器。我檢查/etc/mysql/my.cnf文件,它表明我的數據庫臨時目錄:LOAD DATA INFILE不起作用

... 
basedir  = /usr 
datadir  = /var/lib/mysql 
tmpdir  = /tmp 
... 

,因爲它表明,我的MySQL服務器臨時目錄/tmp

我有一個students.dat文件,這個文件的內容是類似以下內容:

... 
30 kate name 
31 John name 
32 Bill name 
33 Job  name 
... 

我複製了上述students.dat文件/tmp目錄。然後,我運行下面的命令從students.dat文件中的數據加載到學生表在我的數據庫:

LOAD DATA INFILE '/tmp/students.dat' 
      INTO TABLE school_db.students 
      FIELDS TERMINATED BY '\t' 
      LINES TERMINATED BY '\n' 
      (student_id, name, attribute) 

但我在MySQL控制檯中的錯誤消息:

ERROR 29 (HY000): File '/tmp/students.dat' not found (Errcode: 13) 

爲什麼mysql找不到students.dat文件雖然文件在mysql臨時目錄下?

P.S.

學生表就像以下(目前已經有4個表中的記錄之前運行LOAD DATA INFILE...查詢):

mysql> describe students; 

    +-------------------+--------------+------+-----+---------+-------+ 
    | Field    | Type   | Null | Key | Default | Extra | 
    +-------------------+--------------+------+-----+---------+-------+ 
    | student_id  | int(11)  | YES |  | NULL |  | 
    | name    | varchar(255) | YES | MUL | NULL |  | 
    | attribute   | varchar(12) | YES | MUL | NULL |  | 
    | teacher_id  | int(11)  | YES |  | NULL |  | 
    +-------------------+--------------+------+-----+---------+-------+ 
    4 rows in set (0.00 sec) 

回答

10

看一看從file not found error第六職。如果指定LOAD DATA LOCAL INFILE應該工作,似乎(他們加入LOCAL關鍵字)

+0

'LOCAL INFILE'是一種解決方法。使用它的解決方案可能是將文件所有權更改爲'mysql'的文件所有權。或者,我有兩個相同的MySQL服務器和客戶端安裝,並且支持一個常規的'LOAD DATA INFILE'。唯一的區別是MySQL的'/ var/lib/mysql'與'/ tmp /'不在一個分區上 –

2

ERROR 29 (HY000): File '/tmp/file_name' not found (Errcode: 13)

,當我們試圖從任何位置加載數據文件中的任何表中的MySQL數據庫主要發生此錯誤。

只需更改文件的所有者即可。

1)檢查與此命令的文件的權限: ls -lhrt <filename>

2)然後更改所有權: chown mysql.mysql <filename>

3)現在嘗試LOAD DATA INFILE命令。它會工作。