我有一个脚本,尝试使用
据我所知,这些在重要方面是相同的。但是,如果在MySQL命令行中执行以下操作:
我从论坛帖子中了解到,errno 13表示权限问题。MySQL似乎会特殊处理/tmp目录,但为什么呢?我能找到的最接近的答案是手册中的一行文字:
“出于安全原因,在读取位于服务器上的文本文件时,这些文件必须位于数据库目录中或可被所有人读取。”
/tmp不在数据库目录中,但也许它被视为在其中。那么我该如何设置才能使其读取/tmp以外的文件呢?
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
据我所知,这些在重要方面是相同的。但是,如果在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表示权限问题。MySQL似乎会特殊处理/tmp目录,但为什么呢?我能找到的最接近的答案是手册中的一行文字:
“出于安全原因,在读取位于服务器上的文本文件时,这些文件必须位于数据库目录中或可被所有人读取。”
/tmp不在数据库目录中,但也许它被视为在其中。那么我该如何设置才能使其读取/tmp以外的文件呢?
mysql
前导出TMPDIR=/tmp2
,会发生什么? - Frédéric Hamiditmpdir
的值,它不会影响行为(即使现在是临时目录,tmp2仍然失败)。 - Tim Martin