已经多次讨论过类似的问题,但我发现在我的案例中没有解决方案。
Mysql版本:
$ mysql --version
mysql Ver 14.14 Distrib 5.6.30, for debian-linux-gnu (x86_64) using EditLine wrapper
在Ubuntu 15.10 64位桌面上。
这是我尝试运行的命令:
$ mysql -u dmeziere -p -e "LOAD DATA INFILE '/tmp/FR.csv' INTO TABLE project_dev.cities CHARACTER SET 'UTF8' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 0 ROWS (country_code, country_name, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2, admin_name3, admin_code3, latitude, longitude, accuracy);"
Enter password:
ERROR 29 (HY000) at line 1: File '/tmp/FR.csv' not found (Errcode: 13 - Permission denied)
如您所见,客户端和服务器位于同一主机上。
此命令是我通常在同一模式上运行的另一台服务器(Debian 8.0上的MySQL 5.5.43)的复制/粘贴。
尝试" LOAD DATA LOCAL INFILE"被拒绝了。添加--local-infile不起作用。
以下是我的补助金:
mysql> show grants;
+--------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for dmeziere@localhost |
+--------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'dmeziere'@'localhost' IDENTIFIED BY PASSWORD '***' WITH GRANT OPTION |
+--------------------------------------------------------------------------------------------------------------------------------------------+
1 rows in set (0,00 sec)
所以我应该拥有FILE权限。无论如何,我还尝试使用mysql root默认帐户。
以下是文件烫发:
$ ll /tmp/FR.csv
-rwxrwxrwx 1 dmeziere dmeziere 6,2M mai 25 13:08 /tmp/FR.csv
因此该文件存在且可访问。正如您想象的那样,我尝试从更深的路径移动文件以限制错误,并在尝试查找线索时为其提供完全权限。 / tmp上的perms是drwxrwxrwt root root。我也尝试过sudo mysql。
两个系统都不使用SE Linux。
最后,我在桌面上选择*以确保它仍为空,以消除误报。
一个想法?
答案 0 :(得分:1)
最后,它不是一个文件系统问题。无论权限如何,MySQL都拒绝读取CSV文件。将CSV文件放在MySQL数据目录(通常是/ var / lib / mysql)中就可以了。这种安全功能似乎并不存在于各种MySQL和操作系统中。
当然,您不应该忘记在导入后删除文件。
我发现这种行为有点好奇。我真的不明白为什么导入CSV文件应该比导入DQL文件更难。
答案 1 :(得分:0)
尝试一下:
service apparmor stop
service apparmor teardown
我遇到了相同的问题,并通过这些命令对其进行了解决。