2010-11-18 2 views
45

В моей удаленной MySQL, когда я пытаюсь выполнить этот запрос, Я получаю MySQL Код ошибки: 13.НАГРУЗКИ Код DATA INFILE Ошибка: 13

Запрос -

LOAD DATA INFILE 
'/httpdocs/.../.../testFile.csv' 
INTO TABLE table_temp 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\\r \\n' 
(sku, qty); 

Код ошибки: 13 Can't get stat of '/httpdocs/.../.../testFile.csv' (Errcode: 2)

a. В базе данных userlogin есть все грантовые привилегии.

CREATE USER 'userName'@'%' IDENTIFIED BY '************'; 

GRANT ALL PRIVILEGES ON * . * TO 'userName'@'%' IDENTIFIED BY '************' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; 

GRANT ALL PRIVILEGES ON `userName\_%` . * TO 'userName'@'%'; 

b. Я также установил права на файл и папку на chmod 777 (rwxrwxrwx) с помощью FTP-инструмента

+0

Вы говорите, что это удаленный mysql, это место csv в удаленном mysql? – ajreal

+0

Из MS Windows System с использованием mysqlbench, подключенного к удаленной базе данных mysqld. Да, файл csv действительно находится на удаленном сервере Linux. – user292049

ответ

19

Обычно это проблема с правами доступа к файлу, но я вижу вашу уже обращенную адресацию в точке b, но стоит обратить внимание на всякий случай , Другой вариант - использовать LOAD DATA LOCAL INFILE, который преодолевает многие из этих проблем с разрешениями доступа к файлам. Чтобы использовать этот метод, хотя вам нужно скопировать файл локально (в папке mysql лучше всего). • Если указан LOCAL, файл считывается клиентской программой на клиентском хосте и отправляется на сервер.

Недостаточно разрешения Каталога

Ошибка в данном примере привела потому, что файл, который вы пытаетесь импорта не в каталоге, который является читаемого пользователем сервер MySql выполняется в виде. Обратите внимание, что все дочерние каталоги в каталоге нуждаются в чтении пользователем MySql для этого. Сохранение Файл в/tmp обычно работает как , что обычно читается (и доступно для записи) всеми пользователями. Код ошибки номер 13. Source

EDIT:

Помните, что вы будете нужны права на не только в папке, содержит файл, но и верхние каталоги.

Пример от this сообщение на форумах MySql.

Если файл содержится в следующей strucutre: /tmp/imports/site1/data.file

вам нужно будет (я думаю, 755 работали) г + для «других» на этих каталогах:

/TMP

/TMP/импорта

а также основные два:

/TMP/импорт/site1

/tmp/imports/site1/data.file

Вам нужен файл и каталог будет доступен для чтения. Извинения, если вы уже пробовали этот метод, но, возможно, стоит повторить шаги, никогда не бойтесь дважды проверять.

+0

Я попытался использовать LOAD DATA LOCAL INFILE. Но я получаю сообщение об ошибке. Использованная команда не допускается с этой версией MySQL. Версия mysql 5.0.77 – user292049

+0

Привет, спасибо, что вернулись. Я дал разрешение на все каталоги, подкаталоги, файлы с drwxrwxrwx. Восстановил базы данных, обновил их и все еще не работал. – user292049

+0

Ничего себе, это действительно противный. У меня будет охота. – JonVD

93

Я знаю, что этот пост старый, но это все еще появляется в результатах поиска. Я не мог найти решение этой проблемы в Интернете, поэтому я решил выяснить это сам. Если вы используете Ubuntu, тогда есть программа под названием «Apparmor», которая мешает MySQL видеть файл. Вот что вам нужно сделать, если вы хотите MySQL, чтобы иметь возможность читать файлы из «TMP» каталог:

sudo vim /etc/apparmor.d/usr.sbin.mysqld 

После того, как вы в файле, вы собираетесь, чтобы увидеть кучу каталогов, которые MySQL может использовать. Добавьте строку /tmp/** rwk в файл (я не уверен, что это важно где, но вот пример того, где я положил его):

/etc/mysql/*.pem r, 

    /etc/mysql/conf.d/ r, 

    /etc/mysql/conf.d/* r, 

    /etc/mysql/*.cnf r, 

    /usr/lib/mysql/plugin/ r, 

    /usr/lib/mysql/plugin/*.so* mr, 

    /usr/sbin/mysqld mr, 

    /usr/share/mysql/** r, 

    /var/log/mysql.log rw, 

    /var/log/mysql.err rw, 

    /var/lib/mysql/ r, 

    /var/lib/mysql/** rwk, 


    /tmp/** rwk, 


    /var/log/mysql/ r, 

    /var/log/mysql/* rw, 

    /var/run/mysqld/mysqld.pid w, 

    /var/run/mysqld/mysqld.sock w, 

    /run/mysqld/mysqld.pid w, 

    /run/mysqld/mysqld.sock w, 

Теперь все, что вам нужно сделать, это перезагрузить Apparmor:

sudo /etc/init.d/apparmor reload 

Примечание. Я использовал «vim», но замените его тем, что ваш любимый текстовый редактор - это то, что вы знаете, как использовать.

+0

Спасибо, это сработало для меня. – QCar

+1

Апаркор очень незрелый. Это решение отлично работает и для меня. Но сегодня он отверг отлично обработанный до подпапки, который был зарегистрирован в файле с/UPPERFOLDER/* rw notation. Я должен был добавить строку, назвавшую эту подпапку явно! – halxinate

+0

Спасибо, он также решил мою проблему. – josete

12

Существует одно свойство в файле конфигурации тузд в разделе [туздЫ] с именем - tmpdir

, например:

tmpdir = c:/temp (Windows) or tmpdir = /tmp (Linux) 

и LOAD DATA INFILE команда может выполнить чтение и запись только в этом месте.

поэтому, если вы поместите свой файл в указанное место, то LOAD DATA INFILE может легко читать и писать любые файлы.

Еще одно решение

мы можем импортировать данные следующей командой слишком

load data local infile 

В этом случае нет необходимости перемещать файл TmpDir, вы можете дать абсолютный путь к файлу, но для выполнения этой команды вам нужно изменить значение одного флага. Флаг

--local-infile 

вы можете изменить его значение с помощью командной строки при получении доступа MySQL

mysql -u username -p --local-infile=1 

Приветствия

+2

Спасибо за это, это сработало для меня. Я просто скопировал каждый CSV, который мне сначала нужно прочитать в/tmp, затем запустил LOAD DATA, и он решил проблему с кодом ошибки 13. – Botman

+0

Это также решило мою проблему с кодом 13. Мигрировал мой файл журнала туда и, как магия, он работал (загрузка данных локальная информация «c: /temp/kmwdw.log») – abelito

46

Добавление ключевого слова «LOCAL» на мой запрос работал для меня:

LOAD DATA LOCAL INFILE 'file_name' INTO TABLE table_name 

Подробное описание ключевого слова можно найти here.

+0

Это сработало для меня. – SexyBeast

+1

Это не работает с MariaDB (по крайней мере, версия 10.0.22 на Linux x86_64): «Использованная команда не допускается с этой версией MariaDB» – jciloa

+1

@jciloa, вы можете добавить -local-infile = 1 или использовать [client ] config of free-local-infile (из памяти немного, прочитайте на нем), чтобы позволить ему разрешаться. Локальный доступ к файлам с помощью этой команды представляет собой риск безопасности, поэтому по умолчанию не включен. – Breezer

4

Я использую Ubuntu 12,04, я должен был создать таблицу, а затем выполните одно из них:

Использование локальных дает ошибку (MySQL 5.5):

> LOAD DATA LOCAL INFILE "file.csv" INTO table inverter FIELDS TERMINATED BY ','; 
ERROR 1148 (42000): The used command is not allowed with this MySQL version 

НАГРУЗКИ команда DATA INFILE по умолчанию отключен по соображениям безопасности, повторно включить его здесь, и он должен работать: https://stackoverflow.com/a/16286112/445131

Вы можете импортировать CSV-файл с помощью mysqlimport:

mysqlimport -u root -p --fields-terminated-by=',' --local dbname tablename.csv 

Обратите внимание, что csv-файл должен иметь то же имя перед расширением, что и таблица.

1

Если вы используете Fedora/RHEL/CentOO можно отключить временно SELinux:

setenforce 0 

Загрузите данные, а затем включите его обратно:

setenforce 1 
+0

Для этого вам понадобятся права root. – bryant1410

5

Ошибка 13 ничего, кроме вопросов разрешения , Даже у меня была та же проблема и мне не удалось загрузить данные в таблицу mysql, а затем сама разрешила проблему.

Вот решение:

Bydefault в

--local-INFILE устанавливается равным 0

, чтобы использовать Симметричного НАГРУЗКИ DATA LOCAL INFILE должен быть включен ,

Так Start MySql так:

MySQL -u имя пользователя -p --local-входной_файл

Это позволит LOCAL INFILE включен во время запуска и, таким образом, есть привычка быть любой проблемы с его использованием!

1

для пользователей Ubuntu

Я бегу MySQL 5.6.28 на Ubuntu 15.10, и я просто побежал в ту же самую проблему, у меня были все необходимые флаги в my.cnf TMPDIR =/TMP местного входной_файл = 1 перезапущен MySQL, и я все еще получаю НАГРУЗКИ код DATA INFILE Ошибка: 13

Так же, как Нельсон упоминалось вопрос был «AppArmor», вроде покровительственно MySQL о разрешениях, я тогда нашел решение благодаря this быстрый & простой учебник.

в основном, предполагается, что ваш TMP реж будет /tmp:

Добавить новые записи TmpDir в /etc/apparmor.d/local/usr.sbin.туздЫ

sudo nano /etc/apparmor.d/local/usr.sbin.mysqld 

* добавить

/tmp/ r, 
/mnt/foo/tmp/** rw, 

Reload AppArmor

sudo service apparmor reload 

перезапуска MySQL

sudo service mysql restart 

Я надеюсь, что поможет несколько Ubuntu-ERS

1

У меня было много хлопот, чтобы исправить это, есть две вещи, чтобы сделать:

  • обновление файла /etc/mysql/my.cnf с local-infile =1 в два места после [mysql] пунктов (это позволяет использовать локальную команду INFILE SQL).

  • обновление через sudo gedit /etc/apparmor.d/usr.sbin.mysqld так AppArmor позволит вам писать в специальные файлы /var/www/ путем добавления строки:

/name of your directory/ r,

/name of your directory/* rw,

Имя каталога может быть как /var/www/toto/ (это позволяет использовать каталог, в котором находятся ваши файлы).

0

У меня возникла такая же проблема и применены решения выше.

В первую очередь моей тестовой среде являются

  • Ubuntu 14.04.3 64-битной
  • MySQL Ver 14.14 DISTRIB 5.5.47, для Debian-Linux-ГНУ (x86_64) с использованием Readline 6.3 (устанавливается просто 'Sudo APT-получить установку ...' команда)

Мои результаты тестирования являются

я) AppArmor решение работать только для/TMP случаев.

ii) Следующее решение работает без решения AppArmor. Я хотел бы оценить Avnish Mehta за его ответ.

$ mysql -u root -p --in-file=1 
... 
mysql> LOAD DATA LOCAL INFILE '/home/hongsoog/study/mysql/member.dat' 
    -> INTO TABLE member_table; 

Важные три очка

  • начало MySQL клиента с --in-файл = 1 вариант
  • использование LOAD DATA LOCAL INFILE вместо LOAD DATA INFILE
  • проверка всех элементов пути имеют разрешение на чтение по всему миру от пути/к пути к файлам данных. Например, следующая подпуть должна быть читаемой в мире или читаемой группой mysql, если INFILE нацелен на '/ home/hongsoog/study/mysql/memer.Dat»

    • /дома
    • /дома/hongsoog
    • /дома/hongsoog/исследование/MySQL
    • /home/hongsoog/study/mysql/member.data

Когда вы запустите клиент mysql WITHOUT «--in-file = 1» и используйте

LOAD DATA LOCAL INFILE ...
, , вы получите

ERROR 1148 (42000): Используемая команда не допускается с этим MySQL версии


В итоге, "--in-файл = 1" параметр в команде клиента тузд и " LOAD DATA LOCAL INFILE ... "должны идти рука об руку.

Надеемся помочь всем.

0

load data infile '/root/source/in.txt' into table employee; ==> Код ошибки: 13

load data infile '/tmp/in.txt' into table employee; ==> работает

CentOS выпуск 6,6 (Final) - 5.5.32 MySQL Community Server (GPL)

что-то связанное с файлом Linux разрешения

+0

Это не дает ответа на вопрос. Вы можете [искать похожие вопросы] (// stackoverflow.com/search) или ссылаться на связанные и связанные вопросы в правой части страницы, чтобы найти ответ. Если у вас есть связанный, но другой вопрос, задайте новый вопрос (// stackoverflow.com/questions/ask) и включите ссылку на эту ссылку, чтобы помочь обеспечить контекст. См.: [Задавайте вопросы, получайте ответы, не отвлекайте] (// stackoverflow.com/tour) –

0

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

0

OLD:

LOAD DATA INFILE '/home/root12/Downloads/task1.csv' INTO TABLE test.task FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; 

File '/home/root12/Downloads/task1.csv' not found (Errcode: 13 - Permission denied) 

НОВАЯ РАБОТА ДЛЯ МЕНЯ:

LOAD DATA LOCAL INFILE '/home/root12/Downloads/task1.csv' INTO TABLE test.task FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; 

Query OK, 500 rows affected, 284 warnings (1.24 sec) 
Query OK, 5000 rows affected, 2846 warnings (1.24 sec) 
0

Если вы используете XAMPP на Mac, это работает для меня:

Перемещение файла CSV/TXT в/Приложения/XAMPP/xamppfiles/htdocs/как указано ниже

LOAD DATA LOCAL INFILE '/Applications/XAMPP/xamppfiles/htdocs/file.csv' INTO TABLE `tablename` FIELDS TERMINATED BY ',' LINES TERMINATED BY ';' 
Смежные вопросы