MySQL LOAD DATA LOCAL INFILE в WINDOWS не РАБОТАЕТ

Я использую Windows с установленным MySQL 8.0.

Я проверил решения, уже опубликованные в stackoverflow, но они не дали немедленных результатов.

Я установил глобальную переменную с помощью SET GLOBAL local_infile = 1; Кажется, что эти параметры сейчас включены, но MySQL продолжает выдавать следующую ошибку:

Код ошибки:

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

Может ли кто-нибудь помочь мне исправить это поведение?

Я пробовал SET GLOBAL local_infile = 1, и он говорит, что включен, но не работает. Думаю, эта команда предназначена для серверной части? Как установить параметр --local-infile = 1, как это предлагается в документации MySQL? У меня нет опыта работы с консолью MySQL. Не могли бы вы предоставить мне полный синтаксис?

veadeveloper 05.06.2018 15:30
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
6
2
13 287
5

Ответы 5

Пытаться:

Файл: Z:\Path\To\MySQL\Files\my_file.csv:

1,"a string"
2,"a string containing a , comma"
3,"a string containing a \" quote"
4,"a string containing a \", quote and comma"

Командная строка MySQL:

Z:\>mysql
Enter password: **************
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 8.0.11 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> DROP TABLE IF EXISTS `_`.`my_table`;
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> CREATE TABLE IF NOT EXISTS `_`.`my_table` (
    ->   `col0` INT NOT NULL PRIMARY KEY,
    ->   `col1` VARCHAR(50) NOT NULL
    -> );
Query OK, 0 rows affected (0.45 sec)

mysql> SHOW VARIABLES WHERE `variable_name` = 'secure_file_priv';
+------------------+-------------------------+
| Variable_name    | Value                   |
+------------------+-------------------------+
| secure_file_priv | Z:\Path\To\MySQL\Files\ |
+------------------+-------------------------+
1 row in set (0.00 sec)

mysql> LOAD DATA LOCAL INFILE 'Z:\\Path\\To\\MySQL\\Files\\my_file.csv'
    ->   INTO TABLE `_`.`my_table`
    ->   FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    ->   LINES TERMINATED BY '\r\n';
ERROR 1148 (42000): The used command is not allowed with this MySQL version

mysql> SELECT @@GLOBAL.`local_infile`;
+-------------------------+
| @@GLOBAL.`local_infile` |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (0.00 sec)

mysql> SET @@GLOBAL.`local_infile` := 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@GLOBAL.`local_infile`;
+-------------------------+
| @@GLOBAL.`local_infile` |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set (0.00 sec)

mysql> LOAD DATA LOCAL INFILE 'Z:\\Path\\To\\MySQL\\Files\\my_file.csv'
    ->   INTO TABLE `_`.`my_table`
    ->   FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    ->   LINES TERMINATED BY '\r\n';
ERROR 1148 (42000): The used command is not allowed with this MySQL version

mysql> SELECT `col0`, `col1`
    -> FROM `_`.`my_table`;
Empty set (0.00 sec)

mysql> exit
Bye

Z:\>mysql --local-infile=1
Enter password: **************
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 8.0.11 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT @@GLOBAL.`local_infile`;
+-------------------------+
| @@GLOBAL.`local_infile` |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set (0.00 sec)

mysql> LOAD DATA LOCAL INFILE 'Z:\\Path\\To\\MySQL\\Files\\my_file.csv'
    ->   INTO TABLE `_`.`my_table`
    ->   FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    ->   LINES TERMINATED BY '\r\n';
Query OK, 4 rows affected (0.19 sec)
Records: 4  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT `col0`, `col1`
    -> FROM `_`.`my_table`;
+------+------------------------------------------+
| col0 | col1                                     |
+------+------------------------------------------+
|    1 | a string                                 |
|    2 | a string containing a , comma            |
|    3 | a string containing a " quote            |
|    4 | a string containing a ", quote and comma |
+------+------------------------------------------+
4 rows in set (0.00 sec)

Есть ли способ установить параметр --local-infile = 1 при запуске из командной строки mySQL (то есть не из командной строки Windows)? Как вам туда войти?

veadeveloper 08.06.2018 08:30

@NikolaasReyns: mysql supports the following options, which can be specified on the command line or in the [mysql] and [client] groups of an option file., см. 4.5.1.1 Параметры mysql.

wchiquito 08.06.2018 11:42

Я проверил это и добавил параметр --local-infile = 1. Когда я подключаюсь к клиенту командной строки MySQL, я вижу, что параметр включен, но он не работает. Однако, когда я пробую это с моей командной строкой из Windows, она работает ... Мне нужно найти способ запустить эту команду в оболочке, потому что она должна быть интегрирована в автоматизированный ETL-процесс.

veadeveloper 08.06.2018 12:08

@NikolaasReyns: Как вы подключите свой ETL-процесс к базе данных ?.

wchiquito 08.06.2018 17:14

Я не понимаю, почему это наконец исправило это по сравнению со всеми другими способами, которыми я установил эту переменную, но это так. К сожалению, это сработало только для интерфейса командной строки, но лучше, чем ничего. Спасибо.

codehelp4 10.09.2018 08:17

По состоянию на январь 2019 года это нерешенная ошибка MySQL Workbench 8.0.12. См .: https://bugs.mysql.com/bug.php?id=91891.
Однако выполнение той же команды через интерфейс командной строки должно работать, если для глобальной переменной local_infile установлено значение 1:

SET @@GLOBAL.local_infile=1;

У меня такая же проблема после поиска, я решаю проблему удалением локального ключевого слова из запроса.

SET GLOBAL local_infile = 1;
SHOW VARIABLES LIKE 'local_infile';

Запрос должен вернуть: ON

Запрос должен выглядеть так:

load data infile 'C:\\CA_DRU_proj_2010-2060.csv'
into table pop_proj
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
ignore 1 lines;

Вы должны заметить, что я удалил здесь ключевое слово local, и теперь оно работает нормально.

Я столкнулся с аналогичной проблемой, используя MySQL 8.0.19 в Windows. Я смог решить, НЕ используя ключевое слово LOCAL AND с помощью диспетчера служб Windows (введите «Службы» на панели задач проводника), щелкните правой кнопкой мыши MySQL80 -> выберите «Свойства», затем на вкладке «Вход в систему» ​​измените значение «Вход в качестве:» на «Локальная системная учетная запись».

Пользователи Windows 10: стоит повторить, насколько важно подтвердить, какую учетную запись Windows использует для запуска службы MySQL.

Эта проблема продолжилась в MySQL 8.0.21 в Windows 10. С LOAD DATA INFILEнетLOAD DATA INFILE LOCAL, который требует дополнительной передачи файлов, даже если вы запускаете клиент и сервер на одном рабочем столе) я начал получать эту ошибку:

not found (OS errno 13 - Permission denied)

По какой-то причине MySQL решил выбрать «Сетевые службы», возможно, потому, что я переместил установку с диска C: по умолчанию на более быстрый физический диск на D:

НЕТ:
No. Wrong. Gives  not found (OS errno 13 - Permission denied error

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

ДА:
Original and correct configuration

документация mySQL поощряет запуск mySQL в Windows в качестве службы Windows, но не дает рекомендаций относительно того, какую учетную запись указать в качестве входа для службы.

Как и многие другие, я перебрал все параметры (local_infile и т. д.), Но не проверял вход в службу, пока не увидел ответ от CesarinG, которому я теперь должен пива или кофе.

Другие вопросы по теме