Eu sou um iniciante absoluto no MySQL (5.5.34) / Linux (Ubuntu 12.04 LTS)`
Eu criei um banco de dados simples com uma tabela. Ao tentar importar dados para ele através de um arquivo 'data_test.csv, uma mensagem de erro 13 aparece.
O exercício do Terminal segue:
mysql> source /home/g/stockrecdb/load_test.sql;
Database changed
ERROR 13 (HY000): Can't get stat of '/home/stockrecdb/data_test.csv' (Errcode: 2)
mysql>
Nota: se estiver usando LOCAL em LOAD DATA LOCAL INFILE aparece um erro: ERROR 1148 (42000): O comando usado não é permitido com esta versão do MySQL
Espero que você esteja usando
LOAD DATA INFILE
.Tente usar
LOAD DATA LOCAL INFILE
em vez deLOAD DATA INFILE
.Outro problema pode ser este, visite os seguintes links: MySQL LOAD DATA.
Quando você fizer login no MySQL, faça como abaixo,
Agora carregue seu CSV usando
LOAD DATA LOCAL INFILE
,precisamos usar--local-infile
antes de carregarCSV
em novas versões do MySQL, devido a razões de segurança.Embora a resposta acima tenha resolvido o problema do OP, sinto que devo contribuir sobre como resolvi o mesmo problema. O erro 13 é causado por permissões de arquivo incorretas ou insuficientes. No meu caso, isso se deve ao SELinux. Se você estiver usando o SELinux, a correção para adicionar o caminho do arquivo de dados aos diretórios permitidos para o MySQL pode ser encontrada nesta resposta: https://stackoverflow.com/a/3971632/1449160
O MySQL requer que o arquivo CSV esteja em um diretório que ele possa acessar.
Mover seu arquivo de "/home/stockrecdb/" para "/tmp" também pode resolver o problema.
Eu tive essa mensagem de erro exata
Error 13 (HY000)
que foi resolvida usando aLOCAL
opção sugerida por Abdul Manaf. No entanto, fiquei preso com um arquivo CSV de tamanho 101 GB. Ao tentar importar este arquivo CSV, o sistema relatou LOW Disk Space Warning e a tarefa de importação não estava terminando. Frustrantemente, o utilitário de disco Gui tools mesmodf -h
comando mostrou que meu diretório raiz tinha mais de 85 GB de espaço em disco.Então aprendi que a
LOCAL
opção copia o arquivo CSV para um local temporário na raiz/diretório. Em seguida, ele lê o arquivo temporário. Como meu arquivo CSV de 101 GB era maior que o espaço vazio deixado na minha raiz / eu estava vendo o aviso de disco baixo, no entanto, isso não foi detectado em muitas ferramentas GUI e baseadas em comandos, exceto no monitor do sistema que reconheci mais tarde. Como estou trabalhando em um banco de dados MySQL de mais de 300 GB, tive que mover o diretório de dados do MySQL para outro disco interno e estava importando o CSV de um disco rígido externo. Copiar o arquivo CSV de 101 GB no diretório de dados do MySQL no disco interno me permite executar oLOAD DATA INFILE
comando sem nenhuma mensagem de erro.Portanto, esteja ciente da
LOCAL
opção para arquivos CSV maiores que o espaço livre do seu diretório raiz. A opção LOCAL também não é uma boa ideia para a resistência do SSD.Outra causa para o "Erro 13 Can't Stat" é que o arquivo de destino não está dentro da hierarquia de diretórios /var/lib/mysql. Aparentemente, o servidor mysql aborda o sistema de arquivos de maneira bem diferente de um usuário normal.
Eu estava tentando carregar/atualizar uma tabela com:
e o MySQL (na verdade, MariaDB) vomitaria com o Erro 13, não importa o que eu fizesse com as permissões. Irritantemente, ele daria esse erro de permissão negada mesmo se o arquivo não existisse, o que era uma pista suficiente para eu lembrar que em uma instalação do Win10, a fonte sites.csv estava em uma pasta Upload na hierarquia MySql.
Depois de mover sites.csv para /var/lib/mysql/ens2_0 e referenciar sem um caminho absoluto, funcionou muito bem.
Supostamente para Ubuntu, Mint ou outras distribuições usando Apparmour, caminhos de arquivos e diretórios permitidos, podem ser editados dentro do arquivo de configuração localizado para mim em /etc/apparmor.d/usr.sbin.mysqld.
No entanto, ainda recebi o erro 13, a menos que incluísse o parâmetro LOCAL antes de INFILE.