【问题标题】:mysql load data infile can't get stat of file Errcode: 2mysql加载数据infile无法获取文件Errcode的统计信息:2
【发布时间】:2011-03-29 03:22:05
【问题描述】:

我已经找遍了,没有找到解决方案,任何帮助都会很棒。

查询:

LOAD DATA INFILE '/Users/name/Desktop/loadIntoDb/loadIntoDB.csv' 
INTO TABLE `tba`.`tbl_name` 
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(
field1, field2, field3
)

错误:

Can't get stat of '/Users/name/Desktop/loadIntoDb/loadIntoDB.csv' (Errcode:2)

注意:

我在 OSX 10.6.4 上运行 MySQL Query 浏览器连接到 MySQL 5.x

我尝试过的事情:

  • 拖放
  • Chmod 777
  • 放入777权限的文件夹 以及具有 777 的文件 权限

【问题讨论】:

  • 查看 mysql 论坛。这里只有一个链接:forums.mysql.com/read.php?10,228976,228976#msg-228976
  • @spinon 试过了,没用。它确实给了我相同的文件路径。我删除了我拥有的文件并将文件拖放到其中。给了我相同的路径。执行时给我同样的错误
  • 另外听起来文件可能不存在:electrictoolbox.com/article/mysql/mysqlimport-errors在页面上搜索errcode:2
  • 我正在远程连接,并且文件在我的本地计算机上,而不是 MySQL 服务器计算机上。这会是个问题吗?
  • 是的。如果您从远程机器上运行 mysql 终端并试图让它获取一个本地文件,那么它将无法工作,因为远程机器上不存在该路径和文件。

标签: mysql load-data-infile


【解决方案1】:

尝试使用LOAD DATA LOCAL INFILE 而不是LOAD DATA INFILE

否则检查apparmor 是否对您的目录有效

【讨论】:

  • 这是 LOAD DATA LOCAL INFILE,因为您引导我走上正确的道路。已接受答案
  • 完美答案,我也遇到了类似的问题,而且是apparmor,谢谢! :-)
  • 答案中缺少的一件事是解释为什么 LOCAL 可能会有所帮助。区别在于 mysql 服务器是否在 mysql 服务器主机上查找文件,或者 mysql 客户端是否在其主机上查找文件并将其传递给服务器。我正在将本地路径传递给远程 mysql 服务器,但它不起作用,LOCAL 解决了这个问题。
  • 我收到错误The used command is not allowed with this MySQL version :(
  • 弃用关键字LOCAL。可以使用--local 启动标志,但不建议。
【解决方案2】:

我遇到了类似的问题。该决议是一个有点丑陋的黑客,但比 apparmor 变通办法更容易记住,前提是您可以“sudo”。首先,我必须将输入文件放在我正在使用的数据库的 mysql 子目录中:

sudo cp myfile.txt /var/lib/mysql/mydatabasename

这会进行复制并将“root”保留为文件所有者。进入 mysql 并执行USE mydatabasename 后,我能够使用

填充适当的表
LOAD DATA INFILE 'mytabdelimitedtextfile.txt' INTO TABLE mytablename;

【讨论】:

  • 对于那些可能觉得这很有用的人来说,这是对我有用的解决方案,而不是公认的答案。我使用的是 Ubuntu 12.04 LTS 和 MySQL 5.5.35-0ubuntu0.12.04.1。
  • 同样,我可以在 Ubuntu 12.04、mysql 5.5.31 上通过将文件的 user:group 更改为 mysql:mysql 来解决这个问题
【解决方案3】:

使用 --local 参数会有所帮助。

例子:mysqlimport --local databasename file.txt -p

来源: http://dev.mysql.com/doc/refman/5.1/en/load-data.html "--local 选项使 mysqlimport 从客户端主机读取数据文件"

【讨论】:

    【解决方案4】:

    对我来说,将内容复制到 /tmp 并将其用作源文件夹就可以了。 我使用 MariaDB,而我的版本不允许使用“LOCAL”修饰符。 有趣的是,授予对 CSV 文件夹的读写权限也不起作用。

    【讨论】:

      【解决方案5】:

      我在 AWS 实例上的 mysql 中填充表时遇到了同样的问题。

      在我的情况下,我在实例本身中有 csv 文件。

      放置绝对路径解决了我的问题。

      这是 MySQL 文档中的一行

      如果指定了 LOCAL,则文件由客户端主机上的客户端程序读取并发送到服务器。该文件可以作为完整路径名给出以指定其确切位置。如果以相对路径名的形式给出,则该名称被解释为相对于启动客户端程序的目录。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-02
        • 2011-05-21
        • 1970-01-01
        • 1970-01-01
        • 2016-05-16
        • 2011-01-28
        • 1970-01-01
        相关资源
        最近更新 更多