我已经查遍了,没有找到解决方案,对此的任何帮助都会很棒。
查询:
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
我尝试过的事情:
我也有类似的问题。该解决方案是一个稍微丑陋的黑客,但比 apparmor 解决方法更容易记住,前提是您可以“sudo”。首先,我必须将输入文件放入我正在使用的数据库的 mysql 子目录中:
sudo cp myfile.txt /var/lib/mysql/mydatabasename
这会进行复制并保留“
root
”作为文件所有者。进入 mysql 并执行 USE mydatabasename
后,我能够使用 填充适当的表
LOAD DATA INFILE 'mytabdelimitedtextfile.txt' INTO TABLE mytablename;
使用 --local 参数将对此有所帮助。
示例:mysqlimport --本地数据库名 file.txt -p
来源: http://dev.mysql.com/doc/refman/5.1/en/load-data.html “--local 选项导致 mysqlimport 从客户端主机读取数据文件”
对我来说,将内容复制到 /tmp 并将其用作源文件夹就可以了。 我使用 MariaDB,并且我的版本不允许使用“LOCAL”修饰符。 有趣的是,授予 CSV 文件夹读写访问权限也不起作用。
我在 AWS 实例上的 mysql 中填充表时遇到了同样的问题。
就我而言,实例本身中有 csv 文件。
放置绝对路径解决了我的问题。
这是 MySQL 文档中的一行
如果指定LOCAL,则文件由客户端主机上的客户端程序读取并发送到服务器。该文件可以作为完整路径名给出,以指定其确切位置。如果作为相对路径名给出,则该名称将相对于客户端程序启动的目录进行解释。
好吧,所以,自从一些 lib udpate 以来我也遇到了同样的问题(在那之前它就像一个魅力一样工作),所以,我已经尝试了我发现的所有内容:
但是,直到我找到这篇文章(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
[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/
(你只需要知道去哪里看即可。)