comenta que lo estoy intentando,
mysql> LOAD DATA LOCAL INFILE '/var/tmp/countries.csv' INTO TABLE countries FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (CountryId,CountryCode,CountryDescription,CountryRegion,LastUpdatedDate,created_by,created_on) SET created_by = 'DH_INITIAL_LOAD', created_on = current_timestamp();ERROR 2068 (HY000): Solicitud de archivo LOAD DATA LOCAL INFILE rechazada debido a restricciones de acceso.
Estaba funcionando bien, descargué pymysql y el conector mysql para el script de python. Lo desinstalé y comprobé que todavía no funciona. La versión y el archivo están activados,
select version() -| 8.0.17 mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | local_infile | ON | +---------------+-------+ 1 row in set (0.00 sec)en ventanas:
para mí después de habilitar local tanto en el cliente como en el servidor y la configuración (en my.ini)
[client] local_infile=1 [mysqld] secure_file_priv="" the sql command ... load data local infile "FILE" change to load data infile "FILE" works every time ... so much so I do not even use the load local anymore and am not sure of the point of the command ...Para usuarios de Mac, si las soluciones anteriores no funcionan (y estoy usando mac OS Big Sur)
Ve a la terminal y escribe
$ vi ~/.my.cnfLuego agrega esto al archivo.
[mysqld] secure_file_priv = ''Guardar y salir de la ventana. Ahora ve a la terminal y reinicia el servidor mysql usando
$mysql.server restartingrese al servidor mysql usando
$ mysql -u <your username> -pAhora ingrese lo siguiente en mysql
mysql> SHOW VARIABLES LIKE "secure_file_priv";Esto debería mostrar el valor de la variable en blanco. Ahora si usas la consulta
load data local infile '<complete_file_path>' into table <table_name> fields terminated by ',';¡Esto debería funcionar! también asegúrese de haber configurado la siguiente variable en "ON" usando:
set global local_infile = 1;Actualizar
Para usuarios de Windows: tener mysql 8.0 instalado a continuación es la variable de archivo seguro mencionada anteriormente
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"Para corregir este error (mysql 8):
ERROR 2068 (HY000): Solicitud de archivo LOAD DATA LOCAL INFILE rechazada por restricciones de acceso.
agregue la siguiente línea en el archivo de configuración de su servidor, en la sección "cliente":
[client] loose-local-infile=1Eso solucionará el error. Sin embargo, esto supone que ya ha configurado lo siguiente en la sección "mysqld":
[mysqld] local_infile=1Tener ambos parámetros configurados en su archivo de configuración le permitirá cargar datos desde cualquier directorio.
Aquí hay un ejemplo simple de uso. Ejecutar en la terminal mysql:
load data local infile '/path/to/file/data.tsv' into table my_table_name fields terminated by '\t' LINES TERMINATED BY '\n' ( `col1`, `col2`, `col3`, `col4` );Para ubuntu:
edite el archivo /etc/mysql/mysql.conf.d/mysqld.cnf y agregue la siguiente línea al final:
reiniciar el servicio
systemctl stop mysql systemctl start mysqlejecute: mysql -u root -p y verifique la variable de archivo local
mysql> show global variables like 'local_infile'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | local_infile | OFF | +---------------+-------+ 1 row in set (0.00 sec) mysql> set global local_infile=true; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | local_infile | ON | +---------------+-------+ 1 row in set (0.00 sec) mysql> exit Byecorrer
mysql --local-infile=1 -u root -p LOAD DATA INFILE '/var/lib/mysql-files/filename' INTO TABLE tablename;El uso de MySql Workbench 8 o superior presentó este problema. Esto me lo arregló:
Esta restricción se puede eliminar de MySQL Workbench 8.0 de la siguiente manera. Edite la conexión, en la pestaña Conexión, vaya a la subpestaña 'Avanzado' y en el cuadro 'Otros:' agregue la línea 'OPT_LOCAL_INFILE=1'.
Esto debería permitir que un cliente que usa Workbench ejecute LOAD DATA INFILE como de costumbre.
Citado de este enlace: https://bugs.mysql.com/bug.php?id=91872
Problema conocido: https://bugs.mysql.com/bug.php?id=91872
para una solución al intentar conectarse a mysql en sí mismo, establezca local-infile en 1 y ejecute el comando de carga: mysql --local-infile=1 -h$MASTER_DB_HOST -u$MASTER_DB_USER -p$MASTER_DB_PASSWD -D$MASTER_DB_NAME
El hecho de que local_infile esté en ON en el servidor no siempre es suficiente. Desde MySQL 8.0, el cliente también debe permitir explícitamente LOCAL INFILE; de lo contrario, obtendrás el error 2068.
Si estás usando el cliente mysql, prueba conectarte así:
mysql --local-infile=1 -u usuario -p
Y verifica:
SHOW SESSION VARIABLES LIKE 'local_infile';
Si el problema comenzó después de instalar o actualizar conectores (como PyMySQL o MySQL Connector), es posible que el cliente esté deshabilitando LOCAL INFILE por motivos de seguridad. En ese caso, debes habilitarlo en la configuración de la conexión, por ejemplo:
mysql.connector.connect(
...,
allow_local_infile=True
)
o el equivalente para el conector que estés usando.
En resumen: el servidor ya tiene local_infile=ON, pero probablemente el cliente o conector que ejecuta la consulta no tiene habilitado LOCAL INFILE.