Respuestas:
También me encontré con este problema. Tuve que agregar LOCAL
a mi declaración SQL.
Por ejemplo, esto da el problema de permisos:
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
Agregue LOCAL
a su declaración y el problema de permisos debería desaparecer. Al igual que:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
--local-infile
opción.
Tuve este problema. Busqué alrededor y no encontré una respuesta satisfactoria. A continuación resumo los resultados de mis búsquedas.
El error de acceso denegado podría significar que:
GRANT FILE on *.* to user@'localhost'
); o,Intente usar este comando:
load data local infile 'home/data.txt' into table customer;
Esto debería funcionar. Funcionó en mi caso.
ERROR 1148 (42000): The used command is not allowed with this MySQL version
La cadena de Lyon me dio un muy buen consejo: en Windows, necesitamos usar barras oblicuas y no barras invertidas. Este código funciona para mí:
File tempFile = File.createTempFile(tableName, ".csv");
FileUtils.copyInputStreamToFile(data, tempFile);
JdbcTemplate template = new JdbcTemplate(dataSource);
String path = tempFile.getAbsolutePath().replace('\\', '/');
int rows = template.update(MessageFormat
.format("LOAD DATA LOCAL INFILE ''{0}'' INTO TABLE {1} FIELDS TERMINATED BY '',''",
path, tableName));
logger.info("imported {} rows into {}", rows, tableName);
tempFile.delete();
Me encontré con el mismo problema y lo resolví siguiendo esos pasos:
Para este tercer punto, puede consultar: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
BR,
ANUNCIO
Esto también me pasó a mí y a pesar de haber seguido todos los pasos descritos por Yamir en su publicación no pude hacerlo funcionar.
El archivo estaba en /tmp/test.csv con 777 permisos. El usuario de MySQL tenía permisos de archivo, la opción LOCAL no estaba permitida por mi versión de MySQL, así que me quedé atascado.
Finalmente pude resolver el problema ejecutando:
sudo chown mysql:mysql /tmp/test.csv
Encontré uno fácil si está usando la línea de comando
Iniciar sesión comomysql -u[username] -p[password] --local-infile
luego SET GLOBAL local_infile = 1;
seleccione su base de datos por use [db_name]
y finalmente LOAD DATA LOCAL INFILE 'C:\\Users\\shant\\Downloads\\data-1573708892247.csv' INTO TABLE visitors_final_test FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
SET GLOBAL local_infile = 1;
, no parece funcionar en RDS, pero de todos modos sin eso --local-infile
funcionó
Descubrí que cargar tablas MySQL puede ser rápido y sencillo (estaba usando scripts del administrador de modelos de Python / Django):
1) crear una tabla con todas las columnas VARCHAR (n) NULL, por ejemplo:
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) elimine los encabezados (primera línea) de csv, luego cargue (si olvida LOCAL, obtendrá "# 1045 - Acceso denegado para el usuario 'usuario' @ 'localhost' (usando contraseña: YES)"):
mysql> LOAD DATA LOCAL INFILE "/home/magula6/cogswatch2/well2.csv" INTO TABLE cw_well2 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
-> ;
Query OK, 119426 rows affected, 19962 warnings (3.41 sec)
3) alterar columnas:
mysql> ALTER TABLE cw_well2 CHANGE spud_date spud_date DATE;
mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;
voilà!
Probablemente significa que la contraseña que proporcionó 'user'@'localhost'
es incorrecta.