Respostas:
Eu também encontrei esse problema. Eu tive que adicionar LOCAL
à minha instrução SQL.
Por exemplo, isso dá o problema de permissão:
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
Acrescente LOCAL
à sua declaração e o problema de permissões deve desaparecer. Igual a:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
--local-infile
opção.
Eu tive esse problema. Procurei e não encontrei uma resposta satisfatória. Resumo abaixo os resultados das minhas pesquisas.
O erro de acesso negado pode significar que:
GRANT FILE on *.* to user@'localhost'
); ou,Tente usar este comando:
load data local infile 'home/data.txt' into table customer;
Isso deve funcionar. Funcionou no meu caso.
ERROR 1148 (42000): The used command is not allowed with this MySQL version
Certifique-se de que seu usuário MySQL tenha o privilégio FILE concedido.
Se você estiver em hospedagem compartilhada na web, existe uma chance de que isso seja bloqueado pelo seu provedor de hospedagem.
A string de Lyon me deu uma dica muito boa: no Windows, precisamos usar slahes e não backslashes. Este código funciona para mim:
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();
Encontrei o mesmo problema e resolvi-o seguindo estas etapas:
Para este terceiro ponto, você pode consultar: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
BR,
DE ANÚNCIOS
Isso também aconteceu comigo e apesar de ter seguido todos os passos descritos por Yamir em seu post não consegui fazer funcionar.
O arquivo estava em /tmp/test.csv com 777 permissões. O usuário do MySQL tinha permissões de arquivo, a opção LOCAL não era permitida pela minha versão do MySQL, então eu estava preso.
Finalmente, consegui resolver o problema executando:
sudo chown mysql:mysql /tmp/test.csv
Achei fácil se você estiver usando linha de comando
Entrar comomysql -u[username] -p[password] --local-infile
então SET GLOBAL local_infile = 1;
selecione seu banco de dados por use [db_name]
e 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;
não parece funcionar no RDS, mas de qualquer forma sem isso --local-infile
funcionou
Descobri que carregar tabelas MySQL pode ser rápido e fácil (eu estava usando scripts de gerenciador de modelos python / Django):
1) criar tabela com todas as colunas VARCHAR (n) NULL, por exemplo:
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) remova os cabeçalhos (primeira linha) do csv e carregue (se você esquecer o LOCAL, receberá “# 1045 - Acesso negado para o usuário 'usuário' @ 'localhost' (usando senha: SIM)”):
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 colunas:
mysql> ALTER TABLE cw_well2 CHANGE spud_date spud_date DATE;
mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;
voilà!
Provavelmente significa que a senha fornecida 'user'@'localhost'
está incorreta.