MySQL LOAD DATA INFILE“未找到(错误代码:13 - 权限被拒绝)”

时间:2015-06-10 15:33:04

标签: php mysql permission-denied load-data-infile

上周这是有效的,今天却没有。我没有更改php文件。我在临时工作中所做的就是在我的Ubuntu 15.04服务器上运行apt-get update。

我的MySQL声明是:

LOAD DATA INFILE "/var/www/html/uploads/TitleList.csv" INTO TABLE tblLSITitleList FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "\"" IGNORE 5 LINES;

这会出现以下错误:

  

找不到文件'/var/www/html/uploads/TitleList.csv'(错误代码:13 - 权限被拒绝)

我尝试过以下解决方案(这是我上周初解决这个问题的方法: LOAD DATA INFILE Error Code : 13

我检查了apparmor,上传文件夹仍在那里。

我也试过chmodding各种权限,包括777,但没有任何帮助。

有任何聪明的建议吗?

4 个答案:

答案 0 :(得分:3)

虽然可以将CSV复制到mysql数据目录中,但这不是一个好的持续解决方案。如果您正在使用SQL命令行或代码,请在查询中包含LOCAL选项。

  • 例如:而不是LOAD DATA INFILE尝试LOAD DATA LOCAL INFILE

如果您使用cPanel或phpmyadmin导入CSV using LOAD DATA,请务必启用Use LOCAL keyword。这在共享服务器环境中对我有用。

这可以防止每次都必须将CSV复制到MySQL数据目录。

答案 1 :(得分:2)

来自文档:

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

我建议将.csv文件复制到数据库目录,例如

cp TitleList.csv /var/lib/mysql/yourdbname/TitleList.csv

然后

LOAD DATA INFILE 'TitleList.csv' INTO etc ...

答案 2 :(得分:0)

就我而言,LOAD DATA INFILE是第一个数据集的成功案例。 但是有了第二个数据集,我得到了错误代码13。

我所做的(赢得用户),我按CTRL+ALT+DELETE,然后选择Start Task Manager,然后转到processes选项卡,选择Excel,然后按{{ 1}}。

然后再次尝试End Task并成功。

注意: 在此之前,我试图打开CSV文件只是为了检查数据集。 花了太长时间,因此,我在打开文件之前立即将其关闭。

也许不完整的过程干扰了加载过程。

我不确定使用PHP,因为我只是使用phpmyadmin并使用MySQL

答案 3 :(得分:0)

添加 LOCAL 关键字对我有用。我还确保该文件具有 READ 权限,因为我在 Ubuntu 中工作:

LOAD DATA LOCAL INFILE '/path/to/file/name.csv'
    INTO TABLE 'table_name'
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n';