LOAD DATA INFILE Код ошибки: 13

В моем удаленном MySQL, когда я пытаюсь выполнить этот запрос, Я получаю код ошибки MySQL: 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)

а. В базе данных 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'@'%';

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

Ответ 1

Я знаю, что этот пост старый, но это все еще появляется в результатах поиска. Я не мог найти решение этой проблемы в Интернете, поэтому я решил выяснить это сам. Если вы используете 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", но замените это тем, что ваш любимый текстовый редактор знает, как вы его используете.

Ответ 2

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

LOAD DATA LOCAL INFILE 'file_name' INTO TABLE table_name

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

Ответ 3

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

Недопустимые разрешения каталога

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

EDIT:

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

Пример из этого сообщения на форумах MySql.

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

вам понадобится (я думаю, 755 работал) r + x для "other" в этих каталогах:

/TMP

/TMP/импорт

Также как и основные два:

/TMP/импорт/site1

/tmp/imports/site1/data.file

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

Ответ 4

В файле конфигурации mysql есть одно свойство в разделе [mysqld] с именем - 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

Приветствия

Ответ 5

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

Использование local дает ошибку (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

Команда LOAD DATA INFILE по умолчанию отключена по соображениям безопасности, снова включите ее и она должна работать: fooobar.com/questions/59808/...

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

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

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

Ответ 6

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

Здесь решение:

Bydefault

- local-infile устанавливается в значение 0

чтобы использовать LOAD DATA LOCAL INFILE, он должен быть включен.

Итак, запустите mySQL следующим образом:

mysql -u имя_пользователя -p -local-infile

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

Ответ 7

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

setenforce 0

Загрузите свои данные и верните их обратно:

setenforce 1

Ответ 8

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

  • обновить файл /etc/mysql/my.cnf с помощью local-infile =1 в двух местах после [mysql] абзацев (это позволяет использовать команду LOCAL 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/ (это позволяет использовать каталог, в котором находятся ваши файлы).

Ответ 9

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

Я запускаю mysql 5.6.28 на Ubuntu 15.10, и я просто столкнулся с одной и той же проблемой, у меня были все необходимые флаги в my.cnf tmpdir =/tmp локальный входной_файл = 1 перезапустил mysql, и я все равно LOAD DATA INFILE Код ошибки: 13

Точно так же, как Нельсон упоминал, что проблема была "apparmor", вроде покровительственной mysql о разрешениях, я нашел решение благодаря this быстро и быстро простой учебник.

в основном, если ваш tmp dir будет /tmp:

Добавьте новые записи tmpdir в /etc/apparmor.d/local/usr.sbin.mysqld

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

* добавьте это

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

Обновить AppArmor

sudo service apparmor reload

Перезапустить MySQL

sudo service mysql restart

Я надеюсь, что это поможет немногим Ubuntu-ers

Ответ 10

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

Перемещение файла CSV/TXT в /Applications/XAMPP/xamppfiles/htdocs/следующим образом

LOAD DATA LOCAL INFILE '/Applications/XAMPP/xamppfiles/htdocs/file.csv' INTO TABLE 'tablename' FIELDS TERMINATED BY ',' LINES TERMINATED BY ';'

Ответ 11

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

Прежде всего моя тестовая среда выглядит следующим образом

  • Ubuntu 14.04.3 64bit
  • mysql Ver 14.14 Распространение 5.5.47 для debian-linux-gnu (x86_64) с использованием readline 6.3 (устанавливается только командой "sudo apt-get install..." )

Результаты моего тестирования

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

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

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

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

  • запустить mysql-клиент с параметром -in-file = 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​​li >

При запуске mysql client WITHOUT "--in-file = 1" и используйте

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

ОШИБКА 1148 (42000): Использованная команда не допускается с этой версией MySQL


В заключение, опция "-in-file = 1" в команде клиента mysql и "LOAD DATA LOCAL INFILE..." должна идти рука об руку.

Надеюсь помочь кому угодно.

Ответ 12

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 (GPL)

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

Ответ 13

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

Ответ 14

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)

Ответ 15

  1. local_infile заказ этой системной переменной local_infile
 SHOW VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+

Если нет, перезапустите mysqld с помощью:

sudo ./mysqld_safe --local-infile
  1. Измените ваш CSV файл на папку /tmp чтобы он мог читать его.

  2. импорт в дб

mysql> LOAD DATA INFILE '/tmp/a.csv'  INTO TABLE table_a  FIELDS TERMINATED BY ','  ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
Query OK, 18 rows affected (0.17 sec)
Records: 18  Deleted: 0  Skipped: 0  Warnings: 0

Ответ 16

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

Тем не менее, никто не упоминает, что самый простой способ импортировать данные в MySQL - это использовать собственный инструмент импорта данных !!

Просто щелкните правой кнопкой мыши на столе, и он появится там.

just right click on the table and it comes up there

Ни один из приведенных выше ответов не помог мне, так что просто используйте это, если вы застряли! :)