Как обойти MySQL Errcode 13 с помощью SELECT INTO OUTFILE? - PullRequest
113 голосов
/ 06 мая 2010

Я пытаюсь вывести содержимое таблицы в файл csv с помощью инструкции MySQL SELECT INTO OUTFILE. Если я сделаю:

SELECT column1, column2
INTO OUTFILE 'outfile.csv'
FIELDS TERMINATED BY ','
FROM table_name;

outfile.csv будет создан на сервере в том же каталоге, в котором хранятся файлы этой базы данных.

Однако, когда я изменяю свой запрос на:

SELECT column1, column2
INTO OUTFILE '/data/outfile.csv'
FIELDS TERMINATED BY ','
FROM table_name;

Я получаю:

ERROR 1 (HY000): Can't create/write to file '/data/outfile.csv' (Errcode: 13)

Errcode 13 - ошибка прав доступа, но я получаю ее, даже если я изменю владельца / data на mysql: mysql и предоставлю ему 777 разрешений. MySQL работает как пользователь "mysql".

Странно, но я могу создать файл в / tmp, но не в каком-либо другом каталоге, который я пробовал, даже с такими разрешениями, которые позволят пользователю mysql писать в каталог.

Это MySQL 5.0.75, работающий в Ubuntu.

Ответы [ 13 ]

1 голос
/ 07 июня 2010

Использует ли Ubuntu SELinux? Проверьте, включен ли он и применяется ли он. /var/log/audit/audit.log может быть полезен (если это там, где Ubuntu его вставляет - это местоположение RHEL / Fedora).

1 голос
/ 06 мая 2010

Необходимо указать абсолютный путь, а не относительный путь.

Укажите полный путь к каталогу / data, в который вы пытаетесь записать.

0 голосов
/ 25 ноября 2015

У меня была такая же проблема на CentOs 6.7. В моем случае все права были установлены, но ошибка все равно возникла.Проблема заключалась в том, что SE Linux был в режиме «принудительного».

Я переключил его в «разрешающий», используя команду sudo setenforce 0

Тогда все у меня получилось.

...