ERROR: la carga de datos locales está deshabilitada; esto debe habilitarse tanto en el lado del cliente como del servidor


11

No entiendo las respuestas que otros han proporcionado a preguntas similares, excepto las más obvias, como la siguiente:

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)

Con esto quiero decir que se proporcionó el código exacto. Apreciaría mucho si alguien pudiera guiarme, paso a paso, por lo que necesito hacer para habilitar los datos locales en el lado del "cliente" y del "servidor". Parece que he habilitado los datos locales en el lado del cliente, pero no sé qué instrucciones necesito dar a mi computadora para habilitar el "lado del servidor". No soy un experto en tecnología en absoluto, y solo quiero poder llegar al punto en que los datos se hayan cargado en el banco de trabajo 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)
;

Solo quiero poder importar un archivo .csv a MySQL usando el shell de la línea de comandos.


Respuestas:


8

Si la capacidad LOCAL está desactivada, en el lado del servidor o del cliente, un cliente que intenta emitir una declaración LOCAL DE CARGAR DATOS recibe el siguiente mensaje de error:

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

Me encontré con el mismo problema cuando quiero cargar el archivo de texto pet.txt en la tabla de mascotas siguiendo un tutorial de Mysql: https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html

Después de buscar en línea, lo arreglé siguiendo estos pasos:

  1. establece las variables globales usando este comando:
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
  1. salir del servidor actual:
mysql> quit
Bye
  1. conectarse al servidor con la variable de sistema local-infile:
mysql --local-infile=1 -u root -p1

Esta variable controla la capacidad LOCAL del lado del servidor para las declaraciones LOAD DATA. Dependiendo de la configuración local_infile, el servidor rechaza o permite la carga de datos locales por parte de clientes que tienen LOCAL habilitado en el lado del cliente. Para hacer explícitamente que el servidor rechace o permita sentencias LOAD DATA LOCAL (independientemente de cómo estén configurados los programas y las bibliotecas del cliente en el tiempo de compilación o en el tiempo de ejecución), inicie mysqld con local_infile deshabilitado o habilitado, respectivamente. local_infile también se puede establecer en tiempo de ejecución.

  1. usa tu base de datos y carga el archivo en la tabla:
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?

Referencias

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


Esto funciona para mí :-)
Bryon Nicoson

2

my.cnf archivo:

[client]  
local_infile=1

De la documentación oficial de MySQL 8.0 .


Los documentos MySql no son muy claros. Estableces [cliente], ¿cómo hacer que el lado del servidor y el lado del cliente salgan bien? En Ubuntu con MySql 8, el archivo my.cnf es solo un par de directorios que se refieren a /etc/mysql/mysql.conf.d y /etc/mysql/conf.d. Estoy probando la configuración en el archivo mysql.conf.d / mysql.cnf. Pero, sinceramente, ¿cómo puede tener sentido tener una sola carpeta con los mismos archivos "mysql.cnf" en el nivel superior y en cada subdirectorio. ¿Y ningún cambio para el servidor?
pauljohn32

1
Encuentre el archivo de configuración que tenga la etiqueta [mysqld] y se esté utilizando. Agregue la misma configuración global debajo de esa etiqueta, así como debajo de la etiqueta [cliente].
Adam Friedman

@AdamFriedman Gracias por el punto! El archivo de configuración del servidor para mí estaba en /etc/mysql/mysql.conf.d/mysqld.cnfy agregué el local_infile = 1 bajo [mysqld] y ¡está funcionando ahora! Actualmente no puedo editar esta respuesta porque la cola de edición está llena, pero está incompleta sin el par mysqld.
aderchox
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.