mysql - MySQL LOAD DATA INFILE 需要哪些文件和目录权限?

标签 mysql permissions load-data-infile

我有一个脚本试图使用 LOAD DATA INFILE 将一些数据加载到 MySQL 中。出于某种原因,如果文件位于 /tmp 目录中,它会起作用,但如果文件位于具有相同权限的另一个目录中,则不起作用。我找不到任何方法让 MySQL 从 /tmp 目录或数据库目录外部导入数据,但我在手册中找不到任何解释为什么会这样的内容.

情况:

$ ls -l /
...
drwxrwxrwt  21 root root  4096 2010-10-19 20:02 tmp
drwxrwxrwt   2 root root  4096 2010-10-19 20:14 tmp2

$ ls -l /tmp/data.csv 
-rwxr-xr-x 1 timm timm 415431 2010-10-19 20:02 /tmp/data.csv

$ ls -l /tmp2/data.csv 
-rwxr-xr-x 1 timm timm 415431 2010-10-19 20:14 /tmp2/data.csv

AFAICT 这些在重要方面是相同的。但是,如果在 MySQL 命令行我这样做:

> LOAD DATA INFILE '/tmp2/data.csv' IGNORE INTO TABLE ports
      FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ';
ERROR 29 (HY000): File '/tmp2/data.csv' not found (Errcode: 13)

> LOAD DATA INFILE '/tmp/data.csv' IGNORE INTO TABLE ports 
      FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ';
Query OK, 1 row affected, 1 warning (0.04 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 0

我从论坛帖子中了解到,errno 13 表示存在权限问题。似乎/tmp 被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.

/tmp 不在数据库目录中,但也许它被视为在数据库目录中。那么我应该如何设置才能让它读取 /tmp 之外的文件呢?

最佳答案

mysqlimport --local <database> <infile>

LOAD DATA LOCAL INFILE... should fix the issue.

关于mysql - MySQL LOAD DATA INFILE 需要哪些文件和目录权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3971541/

相关文章:

MySQL 与 web2py : foreign key constraint failing

mysql准备语句在执行stmt时没有重复变量使用

ios - 如何从代码中获取 Facebook 访问 key

安卓权限: who is using what?

mysql - 从命令行 Mysql 创建表时出现问题

mysql - "mysql 8.0"本地 infile 失败 我尝试并显示设置。会不会是权限问题?

mysql - rails 3 : How to make a join in mysql over 3 tables (with :through in the model)

android - 在 TableView 中显示结果集

iis - 如何启用对Web 服务的文件系统访问?

MySQL 从 CSV 数据加载 NULL 值