Load data infile mysql не работает

Load data infile mysql не работает

  • Список форумов‹Технические вопросы‹Базы данных
  • Изменить размер шрифта
  • Для печати
  • FAQ
  • Вход

как включить LOAD DATA LOCAL INFILE?

Модераторы: Art.i, vasya

как включить LOAD DATA LOCAL INFILE?

qwerty001 » Сб дек 11, 2010 1:48 pm

при попытки выполнить запрос LOAD DATA LOCAL INFILE, сервер выдает сообщение с ошибкой:
The used command is not allowed with this MySQL version
[code] => 1148

в статусе переменных сервера LOCAL INFILE = ON

пытался добавить в конфигурацию my.cnf в различные разделы [client] [mysqld] [mysql]
строки
loose-local-infile=1
local-infile=1

пытался перезапустить mysqld с параметром opt —local-infile=1
ничего не помогло.

Образ диска FreeBSD-8-ISPmanager

как включить опцию LOCAL INFILE?

ls » Сб дек 11, 2010 3:48 pm

qwerty001 » Сб дек 11, 2010 4:23 pm

так не совсем верно отрабатывает, если запускать под обычным пользователем, ему нужны права на доступ, иначе будет выдавать ошибку:

(логины/пароли указаны верно, до этого успешно выполняется запрос TRUNCATE TABLE)

если запускать под рутом, то запрос проходит

Re: как включить LOAD DATA LOCAL INFILE?

Komarov » Ср авг 10, 2011 9:55 am

У меня под рутом (или пользователю дать по-больше прав) функция LOAD DATA INFILE работает, только
«The file ‘/home/dtspost/data/www/dtspost.ru/report/files/temp.txt’ must be in the database directory or be readable by all. »
потому что, как я понимаю, не указана опция LOCAL.

Как таки разрешить задачу. Файл загрузки грузится на сайт через веб-интерфейс и php не может его записать в директорию базы.

Re: как включить LOAD DATA LOCAL INFILE?

ls » Ср авг 10, 2011 3:47 pm

Re: как включить LOAD DATA LOCAL INFILE?

Komarov » Чт авг 11, 2011 8:39 am

Re: как включить LOAD DATA LOCAL INFILE?

gloobus » Вс дек 29, 2013 7:38 pm

Re: как включить LOAD DATA LOCAL INFILE?

lamnya » Вс дек 29, 2013 10:19 pm

Re: как включить LOAD DATA LOCAL INFILE?

ls » Пн дек 30, 2013 7:12 am

Источник

Форум

Mysql не работает LOAD DATA LOCAL INFILE

Mysql не работает LOAD DATA LOCAL INFILE

Здравствуйте!
Подскажите пожалуйста как импортировать базу данных через файл.
Делаю в консоли phpmyadmin

КонФИГ MariaDB 10.3
local-infile = 1
КонФИГ PHP_7.4
mysqli.allow_local_iиfile = on

Ошибка:
#2000 — LOAD DATA LOCAL INFILE is forbidden, check mysqli.allow_local_infile

Помогите пожалуйста

Re: Mysql не работает LOAD DATA LOCAL INFILE

Re: Mysql не работает LOAD DATA LOCAL INFILE

Re: Mysql не работает LOAD DATA LOCAL INFILE

Варианты решения проблемы
1. В файле php.ini прописать
mysqli.allow_local_infile = On

2. Прописать строку local-infile=ON в конфиг файл my.cnf в секции [mysqld] [mysql].

Примерный путь к файлу
/etc/my.cnf
или
/etc/mysql/my.cnf

Секции в файле
[mysqld]
local-infile=ON

После этого требуется перезапустить MySQL, например командой service mysql restart.

Читайте также:  Как настроить карабин вепрь

Команда для проверки режима: SHOW VARIABLES LIKE ‘local_infile’

Еще вариант решения проблемы, установить родной драйвер mysql вместо php5-mysql, команда для ОС Debian:

Источник

MySQL: включить ЗАГРУЗИТЬ ЛОКАЛЬНЫЙ ИНФАЙЛ ДАННЫХ

Я использую Mysql 5.5 на Ubuntu 12 LTS. Как мне включить LOAD DATA LOCAL INFILE в my.cnf?

Я пробовал добавить local-infile в свою конфигурацию в разных местах, но все еще получаю сообщение «Используемая команда не разрешена в этой версии MySQL»

На странице руководства MySQL 5.5:

ЛОКАЛЬНЫЙ работает только в том случае, если ваш сервер и ваш клиент настроены на это разрешение. Например, если mysqld был запущен с —local-infile = 0, LOCAL не работает. См. Раздел 6.1.6, «Проблемы безопасности с ЛОКАЛЬНЫМИ ДАННЫМИ ЗАГРУЗКИ».

Вы должны установить опцию:

в запись [mysql] файла my.cnf или вызовите клиент mysql с параметром —local-infile :

Вы должны быть уверены, что этот же параметр определен и в вашем разделе [mysqld], чтобы включить функцию «локальный файл» на стороне сервера.

Это ограничение безопасности.

Файл my.cnf, который вам следует отредактировать, — это файл /etc/mysql/my.cnf . Просто:

Заголовки [mysqld] и [mysql] уже указаны, просто найдите их в файле и добавьте под каждым из них local-infile .

У меня это работает на MySQL 5.5 на Ubuntu 12.04 LTS.

Замените драйвер php5-mysql на собственный драйвер

Я решил эту проблему в MySQL 8.0.11 с помощью команды терминала mysql:

То есть я сначала вошел в систему обычным способом:

После этого вы можете увидеть статус с помощью команды:

Он должен быть включен. Я не буду здесь писать о безопасности при загрузке локальных файлов в базу данных.

если ваш вариант mysql на ubuntu НЕ работает ни при каких обстоятельствах, и вы по-прежнему получаете ошибку 1148, вы можете запустить load data infile команду через командную строку

открыть окно терминала

бегать mysql -u YOURUSERNAME -p —local-infile YOURDBNAME

вам будет предложено ввести пароль mysqluser

вы будете запускать MySQLMonitor, и ваша командная строка будет mysql>

запустите вашу load data infile команду (не забудьте поставить точку с запятой в конце ; )

Смотрите изображение ниже .

Я добавил —local-infile=1 в обычную команду mysql mysql -u root -p

Итак, итоговая строка будет:

Кроме того, для других читателей, если вы пытаетесь сделать это в Django, И ваш сервер разрешает local_infile (вы можете проверить, набрав SHOW VARIABLES через клиент mysql), вы можете добавить это в свой файл settings.py (поскольку python MySQLdb не поддерживает t по умолчанию читать файл .my.cnf):

Вы должны позаботиться о том, как установить соединение mysqli. Полная заслуга за это решение принадлежит Хорхе Альбаренке, источнику

Чтобы это исправить, мне пришлось:

  • Добавьте local-infile = 1 в разделы [mysqld] и [mysql] my.cnf (как объяснено в комментариях выше)
  • Используйте функцию mysqli_real_connect ( документация PHP ).

Загвоздка в том, что с помощью этой функции вы можете явно включить поддержку LOAD DATA LOCAL INFILE. Например (процедурный стиль):

если ваш файл csv расположен так же, как и db, вам нужно удалить LOCAL в LOAD DATA INFILE , иначе вы получите ошибку

Используемая команда не разрешена в этой версии MySQL

Другой способ — использовать mysqlimport клиентскую программу.

Вы вызываете его следующим образом:

Это генерирует LOAD DATA оператор, который загружается tableName.txt в tableName таблицу.

mysqlimport определяет имя таблицы из предоставленного вами файла; использование всего текста от начала имени файла до первой точки в качестве имени таблицы. Итак, если вы хотите загрузить несколько файлов в одной таблице вы могли отличить их как tableName.1.txt , tableName.2.txt . и т.д., например.

Для меня это было немного странно, изо дня в день скрипт, который работал несколько дней, просто перестает работать. Не было более новой версии mysql или какого-либо обновления, но я получал ту же ошибку, поэтому я делаю последнюю попытку с файлом CSV и замечаю, что в конце строк используется \ n вместо ожидаемого (согласно моему сценарию ) \ r \ n, поэтому я сохраняю его с правильным EOL и снова запускаю скрипт без каких-либо проблем.

Читайте также:  Lenovo не работает колонка

Я думаю, что для mysql странно говорить мне, что используемая команда не разрешена в этой версии MySQL, поскольку причина была совершенно другой.

Моя рабочая команда выглядит так:

Я использовал метод ниже, который не требует изменения конфигурации , протестирован на mysql-5.5.51-winx64 и 5.5.50-MariaDB:

поместите ‘загрузить данные . ‘ в файл .sql (например: LoadTableName.sql)

В случае, если Mysql 5.7 вы можете использовать «показать глобальные переменные, например, local_infile»; который предоставит статус локального файла. Вы можете включить его, используя «set global local_infile = ON;».

Хорошо, здесь происходит что-то странное. Чтобы это работало, НЕ нужно вносить какие-либо изменения в конфигурацию /etc/mysql/my.cnf. Все, что вам нужно сделать, это перезапустить текущую службу mysql в терминале:

Затем, если я хочу «воссоздать» ошибку, я просто перезапускаю службу apache:

Что затем можно исправить снова, введя следующую команду:

Итак, похоже, что apache2 делает что-то, чтобы запретить эту функцию при запуске (что затем отменяется / исправляется при перезапуске службы mysql).

Действует в дистрибутивах на основе Debian.

Действует в дистрибутивах на основе RedHat

Для тех из вас, кто ищет ответы, чтобы заставить LOAD DATA LOCAL INFILE работать как я, это, вероятно, сработает. Что ж, у меня это сработало, так что поехали. Установите в percona качестве сервера и клиента mysql, следуя инструкциям по ссылке. Во время установки будет запрошен пароль, поэтому укажите тот, который вы запомните и будете использовать позже. После завершения установки перезагрузите систему и проверьте, работает ли сервер, перейдя в terminal меню mysql -u root -p и введя, а затем пароль. Попробуйте запустить команду LOAD DATA LOCAL INFILE сейчас .. Надеюсь, она сработает 🙂

Кстати, я работал над Rails 2.3 с Ruby 1.9.3 на Ubuntu 12.04.

Источник

PHP Load Data Infile not working

I am still newbie here. I am trying to use mysql LOAD DATA INFILE on php script to load csv file. It neither gives any error nor it loads any data. Can anyone please help me out? I am using following php code

2 Answers 2

You need to set the path to your file

mysql does not look in the same position as the php script is run from, as mysql will then look in its own path location, and will not find the file (cause it’s somewhere else).

You can use __DIR__ in php to get the current location php is running it, so the query would look like $query = «LOAD DATA INFILE «. __DIR__ . DIRECTORY_SEPARATOR . «‘mysqlresults.csv’ INTO TABLE student.student_info FIELDS TERMINATED BY ‘,'»;

The DIRECTORY_SEPARATOR is cause DIR does not have a trailing slash

Your PHP code uses a MySQL extension as a client for the MySQL server. The two components (PHP and MySQL server) many times run on different computers.

LOAD DATA INFILE loads the data from a CSV file that is located on the computer that runs the MySQL server.

I suppose your file is located on the computer that runs the PHP script (i.e. on the computer that runs the MySQL client).

The LOCAL option of the LOAD DATA INFILE command tells the MySQL client to load the data from a file on the computer where it runs (the «local» computer) and send it to the server for loading.

Читайте также:  Как настроить esi julia

For both versions of the command, if the file name does not contain a path, the MySQL client or server uses its configuration to know where to search the file (and it turns out that it usually cannot find it there because the developer doesn’t know/care about that config and puts the file somewhere else).

The solution is quite simple: always use the absolute path of the file. If the file is local (this happens in 99.99% of the cases when PHP is involved) then you can use the PHP magic constant __DIR__ and the function dirname() to build the absolute path of the CSV file starting from the location of the script that contains the code.

From your code it seems the CSV file is located in the same directory as the PHP file(s) (this is not a good practice). The code should be something like:

Источник

MySQL LOAD DATA LOCAL INFILE on WINDOWS not WORKING

I am using a windows with MySQL 8.0 installed.

I have checked the solutions already posted on stackoverflow but these had no immediate results.

I have set the global variable with SET GLOBAL local_infile = 1; This options seems to be enable now but MySQL keeps throwing the following error:

  1. The used command is not allowed with this MySQL version

Can anyone help me out to remedy this behavior ?

5 Answers 5

As of January 2019, this is an unresolved bug with MySQL Workbench 8.0.12. See: https://bugs.mysql.com/bug.php?id=91891 .
Executing the same command through the CLI should work, however, provided the «local_infile» global variable has been set to 1:

I have the same problem after a search, I solve the problem by removing the local keyword from the query.

The query should return: ON

The query should look like this:

You should be noticed that I removed the local keyword from here and now it works fine.

I’ve been dealing with a similar problem, using MySQL 8.0.19 on Windows. I was able to resolve by NOT using the LOCAL keyword AND using the Windows Services manager (type Services on the explorer taskbar), right clicking on MySQL80 ->selecting Properties, then on the Log On tab, changing the Log On As: value to Local System Account.

Windows 10 users: it is worth repeating how important it is to confirm which account Windows is using to run the MySQL service.

This problem continued in MySQL 8.0.21 in Windows 10. With LOAD DATA INFILE (and not LOAD DATA INFILE LOCAL , which requires an additional file transfer even if you’re running client and server on the same desktop) I started receiving this error:

not found (OS errno 13 — Permission denied)

For some reason, MySQL decided to select «Network Services», possibly because I moved the installation from the default C: drive to a faster physical drive on D:

NO:

The original installation had set up Local I selected the radio button for «Local System Account» and that solved it for me.

YES:

The mySQL documentation encourages running mySQL on Windows as a Windows Service, but it gives no recommendation as to which account to specify as the log on for the service.

As many others have, I went through all the options (local_infile etc.) but did not check the service logon until I saw the answer from CesarinG, to whom I now owe a beer or coffee.

Источник

Оцените статью