我在 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)
答案 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
命令。它会起作用。