Estou aprendendo MySQL e tentei usar uma LOAD DATA
cláusula. Quando eu usei como abaixo:
LOAD DATA INFILE "text.txt" INTO table mytable;
Eu recebi o seguinte erro:
O servidor MySQL está sendo executado com a opção --secure-file-priv, portanto não pode executar esta instrução
Como eu lido com esse erro?
Eu verifiquei outra pergunta na mesma mensagem de erro , mas ainda não consigo encontrar uma solução.
Estou usando o MySQL 5.6
mysqldump --tab
, como se não fosse difícil o suficiente para obter seus próprios dados do mysql.LOAD DATA LOCAL INFILE ...
Respostas:
Está funcionando como pretendido. Seu servidor MySQL foi iniciado com a opção --secure-file-priv, que basicamente limita de quais diretórios você pode carregar arquivos usando
LOAD DATA INFILE
.Você pode usar
SHOW VARIABLES LIKE "secure_file_priv";
para ver o diretório que foi configurado.Você tem duas opções:
secure-file-priv
.secure-file-priv
. Isso deve ser removido da inicialização e não pode ser modificado dinamicamente. Para fazer isso, verifique seus parâmetros de inicialização do MySQL (dependendo da plataforma) e my.ini.fonte
--secure-file-priv
.SHOW VARIABLES LIKE "secure_file_priv";
Eu tive o mesmo problema. Finalmente resolvi usando a
LOCAL
opção no comandoLOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;
Você pode encontrar mais informações aqui http://dev.mysql.com/doc/refman/5.7/en/load-data.html
fonte
C:\ProgramData\MySQL\MySQL Server 5.7\Uploads
, 2. incapacitantesecure_file_priv
nomy.ini
e reiniciar mysql 3. Este! Obrigado :)--local-infile
bandeira ao executarmysql
. stackoverflow.com/questions/10762239/…The used command is not allowed with this MySQL version
do MySQL 8.0No Ubuntu 14 e Mysql 5.5.53, essa configuração parece estar ativada por padrão. Para desativá-lo, você precisa adicionar
secure-file-priv = ""
ao seu arquivo my.cnf no grupo de configuração do mysqld. por exemplo:-fonte
# secure-file-priv = ~
ela, ainda assim terá o erro, pois o valor é mostradoNULL
dessa maneira resolve o problema quando você escolhe quais diretórios você pode exportar para o servidor etc.Estou trabalhando no MySQL5.7.11 no Debian, o comando que funcionou para mim ver o diretório é:
fonte
SHOW VARIABLES LIKE "secure_file_priv";
eu recebo oERROR 1146 (42S02): Table 'performance_schema.session_variables' doesn't exist
que também é jogado em outras circunstâncias e, eventualmente, terei que lidar. OSELECT @@global.secure_file_priv;
comando, porém, produziu o resultado esperado.Aqui está o que funcionou para mim no Windows 7 para desativar
secure-file-priv
(Opção # 2 da resposta do vhu ):services.msc
.C:\ProgramData\MySQL\MySQL Server 5.6
(ProgramData
era uma pasta oculta no meu caso).my.ini
arquivo no bloco de notas.secure-file-priv=""
services.msc
.fonte
Se o arquivo for local em sua máquina, use LOCAL em seu comando
fonte
@vhu
Eu fiz o
SHOW VARIABLES LIKE "secure_file_priv";
e ele retornou,C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\
então quando o conectei, ele ainda não funcionava.Quando fui diretamente para o arquivo my.ini, descobri que o caminho está formatado um pouco diferente:
C:/ProgramData/MySQL/MySQL Server 8.0/Uploads
Então, quando eu corri com isso, funcionou. A única diferença é a direção das barras.
fonte
Eu tive o mesmo problema com 'secure-file-priv'. Comentar no arquivo .ini não funcionou e nem mover o arquivo no diretório especificado por 'secure-file-priv'.
Finalmente, como o dbc sugeriu, fazer 'secure-file-priv' igual a uma string vazia funcionou. Portanto, se alguém ficar preso depois de tentar as respostas acima, espero que isso ajude.
fonte
O que funcionou para mim:
secure-file-priv
.Para encontrar esse tipo:
local_infile = 1
.Faça isso digitando:
Se você pegar:
Em seguida, defina-o como uma digitação:
fonte
Este tópico foi visto 522k vezes no momento desta postagem. Honestamente, quando o MySQL se tornou nossa mãe desprotegida e irracional ? Que tentativa demorada de segurança - que realmente serve apenas para nos prender!
Depois de muitas pesquisas e muitas tentativas, tudo falhou.
Minha solução:
fonte
Criei um script de importação do NodeJS se você estiver executando o nodeJS e seus dados estiverem no seguinte formato (aspas duplas + vírgula e \ n nova linha)
Este está configurado para ser executado em http: // localhost: 5000 / import .
Vou linha por linha e cria uma string de consulta
server.js
ImportRoutes.js
db.js é o arquivo de configuração
Isenção de responsabilidade: Esta não é uma solução perfeita - só a estou postando para desenvolvedores que estão dentro de uma linha do tempo e têm muitos dados para importar e estão enfrentando esse problema ridículo. Perdi muito tempo com isso e espero poupar outro desenvolvedor do mesmo tempo perdido.
fonte
Eu tive todos os tipos de problemas com isso. Eu estava mudando o my.cnf e todos os tipos de coisas loucas que outras versões desse problema tentaram mostrar.
O que funcionou para mim:
O erro que eu estava recebendo
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Consegui corrigi-lo abrindo /usr/local/mysql/support-files/mysql.server e alterando a seguinte linha:
para
fonte
Se você estiver executando no Ubuntu, também poderá ser necessário configurar o Apparmor para permitir que o MySQL grave em sua pasta, por exemplo, aqui está a minha configuração:
Adicione esta linha ao arquivo /etc/apparmor.d/usr.sbin.mysqld:
Em seguida, adicione estas 2 linhas de configuração nas seções /etc/mysql/my.cnf:
Aqui está o meu SQL:
Funcionou para mim. Boa sorte!
fonte
Para a versão mysql 8.0, você pode fazer o seguinte:
Funcionou para mim no Mac High Sierra
fonte
Eu tive esse problema no windows 10. "--secure-file-priv no MySQL" Para resolver isso, fiz o seguinte.
O servidor foi iniciado conforme o esperado.
fonte
O MySQL usa essa variável de sistema para controlar onde você pode importar seus arquivos
Então o problema é como alterar variáveis do sistema como
secure_file_priv
.mysqld
sudo mysqld_safe --secure_file_priv=""
agora você pode ver assim:
fonte
No macOS Catalina, segui estas etapas para definir
secure_file_priv
1.Pare o serviço MySQL
2.Reinicie a atribuição do MYSQL às variáveis de sistema --secure_file_priv
Nota: Adicionar valor vazio corrige o problema para mim, e o MYSQL exportará dados para o diretório / usr / local / mysql / data / YOUR_DB_TABLE / EXPORT_FILE
obrigado
fonte
Sem alterar nenhum dos arquivos de configuração.
secure_file_priv
usando o comando postado por @vhu:SHOW VARIABLES LIKE "secure_file_priv"
.select * from table into outfile 'secure_file_priv_PATH/OUTPUT-FILE' ... rest of your query
isso funcionou para o meu no mysql-shell no ubuntu 18.04 LTS mysql 5.7.29
fonte