ERRO: o carregamento de dados locais está desativado - isso deve ser ativado nos lados do cliente e do servidor

11

Não entendo as respostas que outras pessoas forneceram para perguntas semelhantes, exceto as mais óbvias, como a abaixo:

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

mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set (0.01 sec)

Com isso, quero dizer que o código exato foi fornecido. Eu apreciaria muito se alguém pudesse me orientar, passo a passo, o que eu preciso fazer para ativar os dados locais no lado "cliente" e no "servidor". Parece que eu ativei os dados locais no lado do cliente, mas não sei quais instruções eu preciso dar ao meu computador para ativar o "lado do servidor". Eu não sou especialista em tecnologia e quero apenas chegar ao ponto em que os dados foram carregados no ambiente de trabalho MySQL.

ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
CREATE TABLE toys (
uniq_id VARCHAR(1000),
product_name VARCHAR(1000),
manufacturer VARCHAR(1000),
price VARCHAR(1000),
number_available_in_stock VARCHAR (1000),
number_of_reviews INT,
number_of_answered_questions INT,
average_review_rating VARCHAR(1000),
amazon_category_and_sub_category VARCHAR(1000),
customers_who_bought_this_item_also_bought VARCHAR(1000),
description VARCHAR(1000),
product_information VARCHAR(1000),
product_description VARCHAR(1000),
items_customers_buy_after_viewing_this_item VARCHAR(1000),
customer_questions_and_answers VARCHAR(1000),
customer_reviews VARCHAR(1000),
sellers VARCHAR(1000)
);

LOAD DATA LOCAL INFILE ‘/Users/BruddaDave/Desktop/amazonsample.csv INTO TABLE toys
FIELDS TERMINATED BY ‘,’
LINES TERMINATED BY ‘\n
IGNORE 1 LINES
(uniq_id, product_name, manufacturer, price, number_available_in_stock, number_of_reviews, number_of_answered_questions, average_review_rating, amazon_category_and_sub_category, customers_who_bought_this_item_also_bought, description, product_information, product_description, items_customers_buy_after_viewing_this_item, customer_questions_and_answers, customer_reviews, sellers)
;

Eu só quero poder importar um arquivo .csv para o MySQL usando o shell de linha de comando.

Tão frustrado
fonte
Isso responde sua pergunta? MySQL: Habilitar LOAD DATA LOCAL INFILE reset
danblack 30/01

Respostas:

8

Se o recurso LOCAL estiver desativado, no lado do servidor ou do cliente, um cliente que tentar emitir uma instrução LOAD DATA LOCAL receberá a seguinte mensagem de erro:

ERROR 3950 (42000): Loading local data is disabled; this must be
enabled on both the client and server side

Encontrei o mesmo problema quando desejo carregar o arquivo de texto pet.txt na tabela pet, seguindo um tutorial do Mysql: https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html

Depois de pesquisar on-line, eu o corrigi com estas etapas:

  1. defina as variáveis ​​globais usando este comando:
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
  1. saia do servidor atual:
mysql> quit
Bye
  1. conecte-se ao servidor com variável de sistema infile local:
mysql --local-infile=1 -u root -p1

Essa variável controla a capacidade LOCAL do lado do servidor para instruções LOAD DATA. Dependendo da configuração local_infile, o servidor recusa ou permite o carregamento local de dados por clientes que tenham LOCAL ativado no lado do cliente. Para explicitamente fazer com que o servidor recuse ou permita instruções LOAD DATA LOCAL (independentemente de como os programas e as bibliotecas cliente estejam configurados no tempo ou tempo de execução da compilação), inicie o mysqld com local_infile desativado ou ativado, respectivamente. local_infile também pode ser definido em tempo de execução.

  1. use seu banco de dados e carregue o arquivo na tabela:
mysql> use menagerie
Database changed
mysql> load data local infile '/path/pet.txt' into table pet;
Query OK, 8 rows affected, 7 warnings (0.00 sec)

Funciona?

Referências:

https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options .html # option_cmake_enabled_local_infile https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_local_infile

Zhi-Qiang Ni
fonte
Isso funciona para mim :-)
Bryon Nicoson
2

my.cnf Arquivo:

[client]  
local_infile=1

A partir da documentação oficial do MySQL 8.0 .

Breky
fonte
Os documentos do MySQL não são muito claros. Você define [cliente], como fazer com que o lado do servidor e o cliente saiam certo? No Ubuntu com MySql 8, o arquivo my.cnf é apenas um par de diretórios referentes a /etc/mysql/mysql.conf.d e /etc/mysql/conf.d. Estou tentando a configuração no arquivo mysql.conf.d / mysql.cnf. Mas, honestamente, como pode fazer sentido ter uma única pasta com os arquivos "mysql.cnf" com o mesmo nome no nível superior e em cada subdiretório. E nenhuma mudança para o servidor?
pauljohn32
11
Encontre o arquivo de configuração que possui a tag [mysqld] e está sendo usado. Adicione a mesma configuração global sob essa tag e também na tag [client].
Adam Friedman
@AdamFriedman Obrigado pelo ponto! O arquivo de configuração do servidor estava em mim /etc/mysql/mysql.conf.d/mysqld.cnfe adicionei o local_infile = 1 em [mysqld] e está funcionando agora! No momento, não posso editar esta resposta porque a fila de edição está cheia, mas está incompleta sem o par mysqld.
aderchox 28/04