为什么这个MYSQL语句给我一个错误?

时间:2010-12-27 21:32:53

标签: mysql database linux unix permissions

mysql> LOAD DATA INFILE '/home/myuser/myproject/power/ids-ads.txt' INTO TABLE ids_ads  FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';

ERROR 29 (HY000): File '/home/myuser/myproject/power/ids-ads.txt' not found (Errcode: 13)

文件在那里。我甚至将路径粘贴到mysql控制台中。权限是正确的。

事实上,我甚至在root用户和root mysql上测试过它。

-rw-r--r--   1 myuser myuser  15893 2010-12-26 20:56 ids-ads.txt

6 个答案:

答案 0 :(得分:6)

请注意,当您执行LOAD DATA INFILE时,MySQL正在服务器上查找该文件 - 而不是在您的客户端计算机上。

如果要使用LOAD DATA INFILE加载客户端计算机上的文件(而不是服务器计算机),则必须使用LOAD DATA LOCAL INFILE。

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

答案 1 :(得分:2)

来自MySQL手册:

For security reasons, when reading text files located on the server, the files
must either reside in the database directory or be readable by all. Also, to use
LOAD DATA INFILE on server files, you must have the FILE privilege. For non-LOCAL
load operations, if the secure_file_priv system variable is set to a nonempty
directory name, the file to be loaded must be located in that directory. 

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

答案 2 :(得分:0)

嗯...可能是一个愚蠢的问题,但是字符串'/ home ... / ids-ads.txt'中是否有任何不可见的字符?

答案 3 :(得分:0)

正如Marc B所说,文件需要在数据库目录中或所有人都可读。该文件不仅需要可读,而且MySQL需要具有读入存储文本文件的目录的权限。 / home / myuser / myproject / power /及其容器对/ home / myuser的权限是什么?如果在该链中的任何一点,权限将被拒绝,那么MySQL将无法读取该文件。

答案 4 :(得分:0)

如果您正在使用phpmyadmin,请务必启用Use LOCAL keyword。这对我有用。

答案 5 :(得分:0)

如果数据在您的本地计算机上,请使用下面的代码正常工作。

[0, 0, ..., 2, ..., 0, 0]
            ^ index 65