LOAD DATA INFILE不起作用

问题描述:

我正在运行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) 

看一看从file not found error第六职。如果指定LOAD DATA LOCAL INFILE应该工作,似乎(他们加入LOCAL关键字)

+0

'LOCAL INFILE'是一种解决方法。使用它的解决方案可能是将文件所有权更改为'mysql'的文件所有权。或者,我有两个相同的MySQL服务器和客户端安装,并且支持一个常规的'LOAD DATA INFILE'。唯一的区别是MySQL的'/ var/lib/mysql'与'/ tmp /'不在一个分区上 –

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命令。它会工作。