MySQL LOAD DATA INFILE не найден (код ошибки: 13 — разрешение отклонено)

На прошлой неделе это работало, а сегодня нет. Я не изменил файл php. Все, что я сделал за это время, это запустил обновление apt-get на моем сервере Ubuntu 15.04.

У меня есть оператор MySQL:

LOAD DATA INFILE "/var/www/html/uploads/TitleList.csv" INTO TABLE tblLSITitleList FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "\"" IGNORE 5 LINES;

Это дает следующую ошибку:

Файл '/var/www/html/uploads/TitleList.csv' не найден (код ошибки: 13 - Отказано в доступе)

Я попробовал следующее решение (именно так я решил эту проблему в начале прошлой недели: LOAD ДАННЫЕ В ФАЙЛЕ Код ошибки: 13

Я проверил apparmor, и папка загрузки все еще там.

Я также пробовал chmodding различные разрешения, включая 777, но ничего не помогает.

Любые умные предложения?


person Neill    schedule 10.06.2015    source источник
comment
я столкнулся с подобной проблемой, и ничего не работает, тогда мне пришлось перейти на сервер win   -  person black    schedule 10.06.2015


Ответы (4)


Из документов:

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

Я рекомендую скопировать ваш файл .csv в каталог базы данных, например

cp TitleList.csv /var/lib/mysql/yourdbname/TitleList.csv

а потом

LOAD DATA INFILE 'TitleList.csv' INTO etc ...
person Herokiller    schedule 14.01.2016

Хотя можно скопировать CSV в каталог данных mysql, однако это не очень хорошее решение. Если вы используете командную строку или код SQL, включите в запрос параметр LOCAL.

  • Например: вместо LOAD DATA INFILE попробуйте LOAD DATA LOCAL INFILE

Если вы используете cPanel или phpmyadmin для импорта CSV using LOAD DATA, обязательно включите Use LOCAL keyword. Это сработало для меня в среде общего сервера.

Это должно предотвратить необходимость каждый раз копировать CSV в каталог данных MySQL.

person m33k    schedule 13.05.2017
comment
Это решение сработало для меня. Чтобы установить разрешения, я сначала выполнил chmod($fileName, 0777); теоретически это угроза безопасности, но я удаляю файл в конце операции импорта. - person Jason; 27.09.2018

В моем случае LOAD DATA INFILE — это успех с первым набором данных. Но со вторым набором данных у меня есть код ошибки 13.

Что я сделал (выиграл пользователя), я нажал CTRL+ALT+DELETE, а затем выбрал Start Task Manager, затем я перешел на вкладку processes и выбрал Excel, затем нажал End Task.

Затем снова попробовал LOAD DATA INFILE, и это сработало.

Примечание. До этого я пытался открыть CSV-файл только для проверки набора данных. Это заняло слишком много времени, поэтому я закрыл его непосредственно перед открытием файла.

Возможно, незавершенный процесс нарушил процесс загрузки.

Я не уверен в PHP, потому что я просто использую phpmyadmin и играю с MySQL.

person Cloud    schedule 16.10.2018

Добавление ключевого слова LOCAL сработало для меня. Я также убедился, что у файла есть разрешение READ, так как я работаю в Ubuntu:

LOAD DATA LOCAL INFILE '/path/to/file/name.csv'
    INTO TABLE 'table_name'
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n';
person Jorge Z    schedule 09.05.2021