У меня есть сценарий, который пытается загрузить некоторые данные в MySQL с LOAD DATA INFILE
. По некоторым причинам это работает, если файл находится в /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, но почему? Самой близкой я могу приехать, является строка в ручном высказывании:
Из соображений безопасности, при чтении текстовых файлов, расположенных на сервере, файлы должны или находиться в каталоге базы данных или быть читаемыми всеми.
/tmp
не находится в каталоге базы данных, но возможно его рассматривают, как будто это. Таким образом, как я должен настроить вещи для него для чтения файлов за пределами /tmp
?