LOAD DATA INFILE不起作用

时间:2011-12-12 08:43:56

标签: mysql sql database

我在 Ubuntu 计算机上运行 MySQL 。我检查了/etc/mysql/my.cnf文件,它显示了我的数据库临时目录:

...
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。

学生表格如下(在运行LOAD DATA INFILE...查询之前,表格中已有4条记录):

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)

2 个答案:

答案 0 :(得分:10)

查看file not found error的第六篇文章。如果您指定LOAD DATA LOCAL INFILE应该有效(他们添加了LOCAL关键字)

答案 1 :(得分: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命令。它会起作用。