繁体   English   中英

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

[英]MySQL LOAD DATA INFILE "not found (Errcode: 13 - Permission denied)"

上周这行得通,今天不行。 我没有更改 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 - 权限被拒绝)

我尝试了以下解决方案(这是我上周早些时候解决这个确切问题的方法: 加载数据输入错误代码:13

我检查了 apparmor,上传文件夹仍然存在。

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

有什么聪明的建议吗?

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

  • 例如:相反的LOAD DATA INFILE尝试LOAD DATA LOCAL INFILE

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

这应该可以防止每次都必须将CSV复制到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

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

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

然后

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

就我而言, LOAD DATA INFILE在第一个数据集中取得了成功。 但是对于第二个数据集,我有这个错误代码13。

我做了什么(赢得用户),我按CTRL+ALT+DELETE然后我选择了Start Task Manager ,然后我进入了processes选项卡并选择了Excel然后按下了End Task

然后再次尝试LOAD DATA INFILE并且它有效。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM