mysql在文件中加载数据无法获取文件的统计信息错误代码:2

问题描述 投票:0回答:6

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

查询:

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 查询浏览器,连接到 MySQL 5.x

我尝试过的事情:

  • 拖放
  • 修改777
  • 放入777权限的文件夹中 以及具有 777 的文件 权限
mysql load-data-infile
6个回答
139
投票

尝试使用

LOAD DATA LOCAL INFILE
代替
LOAD DATA INFILE

否则请检查 apparmor 是否对您的目录处于活动状态


11
投票

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

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

这会进行复制并保留“

root
”作为文件所有者。进入 mysql 并执行
USE mydatabasename
后,我能够使用

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

2
投票

使用 --local 参数将对此有所帮助。

示例:mysqlimport --本地数据库名 file.txt -p

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


1
投票

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


0
投票

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

就我而言,实例本身中有 csv 文件。

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

这是 MySQL 文档中的一行

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

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


0
投票

好吧,所以,自从一些 lib udpate 以来我也遇到了同样的问题(在那之前它就像一个魅力一样工作),所以,我已经尝试了我发现的所有内容:

  • 将 csv 文件移动到 /tmp
  • 尝试“本地”参数
  • chmod 到 777 csv
  • 将 csv chown 到 mysql:mysql
  • 检查apparmor配置(已经很好了)

但是,直到我找到这篇文章(https://bbs.archlinux.org/viewtopic.php?id=227181),我将其复制到下面以供将来参考(以防原始帖子消失)

问题在于 MariaDB systemd 服务文件的最新更改阻止了来自 /home、/root、/run/user 和 /tmp 的任何文件访问:

# Prevent accessing /home, /root and /run/user
ProtectHome=true

对 /tmp 的访问在服务文件的其他地方受到限制。为了让其他人遇到此问题,以下是允许从 /home 访问文件的必要步骤。请注意,即使您的服务文件名为 mysqld.service(如我的),您仍然需要将补充服务文件的文件夹命名为 mariadb.service.d(否则它将无法工作)。

# mkdir /etc/systemd/system/mariadb.service.d
# cd /etc/systemd/system/mariadb.service.d
  • 创建了一个名为 load_data.conf 的文件,并在文件中输入以下行:
[Service]

# Override default directive with prevents  accessing /home, /root and /run/user
ProtectHome=false
# systemctl daemon-reload
# systemctl restart mysqld

这一切都记录在这里; https://mariadb.com/kb/en/mariadb/systemd/

(你只需要知道去哪里看即可。)

© www.soinside.com 2019 - 2024. All rights reserved.