Я использую 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, «Проблемы безопасности с ЛОКАЛЬНЫМИ ДАННЫМИ ЗАГРУЗКИ».
Вы должны установить опцию:
local-infile=1
в запись [mysql] файла my.cnf или вызовите клиент mysql с параметром --local-infile :
mysql --local-infile -uroot -pyourpwd yourdbname
Вы должны быть уверены, что этот же параметр определен и в вашем разделе [mysqld], чтобы включить функцию "локальный файл" на стороне сервера.
Это ограничение безопасности.
my.cnf
путь находится/etc/mysql/my.cnf
на моей машине (AWS EC2).apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/var/www/myfile.csv" pid=19488 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=106 ouid=33
. Решение очень простое. Просто обновите/etc/apparmor.d/local/usr.sbin.mysqld
и перезагрузите сервис apparmor.Файл my.cnf, который вам следует отредактировать, - это файл /etc/mysql/my.cnf . Просто:
Затем добавьте:
Заголовки [mysqld] и [mysql] уже указаны, просто найдите их в файле и добавьте под каждым из них local-infile .
У меня это работает на MySQL 5.5 на Ubuntu 12.04 LTS.
источник
Ubuntu 14.04.2 LTS not working
./mysql/my.cnf
по умолчанию не существует. Просто создайте каталог и файл и вставьте эти строки в файл./etc/mysql/conf.d/enable-local-infile.cnf
Также не забудьтеsudo service mysql restart
после внесения изменений конфигурации, чтобы они вступили в силу.Замените драйвер php5-mysql на собственный драйвер
На Debian
источник
Я решил эту проблему в MySQL 8.0.11 с помощью команды терминала mysql:
То есть я сначала вошел в систему обычным способом:
После этого вы можете увидеть статус с помощью команды:
Он должен быть включен. Я не буду здесь писать о безопасности при загрузке локальных файлов в базу данных.
источник
SET GLOBAL local_infile = true;
. Моя версия MySQL - 8.0.12. Возможно это последнее решение. Огромное спасибо.8.0.12 MySQL Community Server
в Windows.SET GLOBAL local_infile = true;
команду, но все равно получаю ту же ошибку,ERROR 1148 (42000): The used command is not allowed with this MySQL version
но подключение к mysql с --load-infile = 1 сработалоmysql --local-infile=1 -u root -p
если ваш вариант mysql на ubuntu НЕ работает ни при каких обстоятельствах, и вы по-прежнему получаете ошибку 1148, вы можете запустить
load data infile
команду через командную строкуоткрыть окно терминала
бегать
mysql -u YOURUSERNAME -p --local-infile YOURDBNAME
вам будет предложено ввести пароль mysqluser
вы будете запускать MySQLMonitor, и ваша командная строка будет
mysql>
запустите вашу
load data infile
команду (не забудьте поставить точку с запятой в конце;
)как это:
источник
Смотрите изображение ниже ...
Я добавил
--local-infile=1
в обычную команду mysqlmysql -u root -p
Итак, итоговая строка будет:
источник
SET GLOBAL ..
нет. Команда 'source' (\. file.sql
) как-то запускает новый сеанс или сбрасывает его? Однако я не пробовал устанавливать эту настройку в sql-скрипт mmy.Кроме того, для других читателей, если вы пытаетесь сделать это в Django, И ваш сервер разрешает local_infile (вы можете проверить, набрав SHOW VARIABLES через клиент mysql), вы можете добавить это в свой файл settings.py (поскольку python MySQLdb не поддерживает t по умолчанию читать файл .my.cnf):
источник
Вы должны позаботиться о том, как установить соединение mysqli. Полная заслуга за это решение принадлежит Хорхе Альбаренке, источнику
Чтобы это исправить, мне пришлось:
Загвоздка в том, что с помощью этой функции вы можете явно включить поддержку LOAD DATA LOCAL INFILE. Например (процедурный стиль):
или объектно-ориентированный
источник
если ваш файл csv расположен так же, как и db, вам нужно удалить LOCAL в LOAD DATA INFILE , иначе вы получите ошибку
источник
Другой способ - использовать
mysqlimport
клиентскую программу.Вы вызываете его следующим образом:
Это генерирует
LOAD DATA
оператор, который загружаетсяtableName.txt
вtableName
таблицу.Помните следующее:
mysqlimport
определяет имя таблицы из предоставленного вами файла; использование всего текста от начала имени файла до первой точки в качестве имени таблицы. Итак, если вы хотите загрузить несколько файлов в одной таблице вы могли отличить их какtableName.1.txt
,tableName.2.txt
... и т.д., например.источник
Для меня это было немного странно, изо дня в день скрипт, который работал несколько дней, просто перестает работать. Не было более новой версии mysql или какого-либо обновления, но я получал ту же ошибку, поэтому я делаю последнюю попытку с файлом CSV и замечаю, что в конце строк используется \ n вместо ожидаемого (согласно моему сценарию ) \ r \ n, поэтому я сохраняю его с правильным EOL и снова запускаю скрипт без каких-либо проблем.
Я думаю, что для 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.
источник
Все: Очевидно, это работает как задумано. См. Новый справочник от 2019-7-23, Раздел 6.1.6, Проблемы безопасности с LOAD DATA LOCAL .
источник
Добавить
local_infile
в обоихclient
иmysqld
секции.Протестировано в MySQL 8.x как в Windows, так и в Linux.
источник
Я использую xampp v3.2.4 и mysql server 8.0.20.
Я добавил
local-infile=1
к[mysql]
и[mysqld]
в файле «my.ini». Файл находится по адресу «C: \ xampp \ mysql \ bin \ my.ini».Затем я вставил данные из файла csv, используя следующий код
LOAD DATA INFILE ...
. Важно переместить LOCAL. Иначе не получится.Спасибо за все предложения выше. Комбинация наконец-то сработала для меня.
источник