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