Recebi o seguinte erro de uma consulta MySQL.
#126 - Incorrect key file for table
Eu nem mesmo declarei uma chave para esta tabela, mas tenho índices. Alguém sabe qual poderia ser o problema?
mysql
mysql-error-126
Brian
fonte
fonte
REPAIR TABLE
e ainda está conseguindo, e ainda há espaço,/tmp
então você pode tentar apenas reiniciar o servidor.Respostas:
Sempre que isso aconteceu, minha experiência foi um disco cheio.
EDITAR
Também é importante notar que isso pode ser causado por um ramdisk completo ao fazer coisas como alterar uma tabela grande se você tiver um ramdisk configurado. Você pode comentar temporariamente a linha do ramdisk para permitir tais operações se não puder aumentar o tamanho dela.
fonte
/tmp
é um pequeno sistema de arquivos tmpfs e mysql ficou sem espaço escrevendo uma tabela temporária lá. Tive que definir atmpdir
variável de configuração conforme mencionado em mysql.comEm primeiro lugar, você deve saber que chaves e índices são sinônimos no MySQL. Se você olhar a documentação sobre a sintaxe CREATE TABLE , poderá ler:
Agora, o tipo de erro que você está recebendo pode ser devido a duas coisas:
No primeiro caso, você verá que adicionar um limite à sua consulta pode resolver o problema temporariamente. Se isso
tmp
for suficiente para você, provavelmente você tem uma pasta muito pequena para o tamanho das consultas que está tentando fazer. Você pode então decidir ou aumentartmp
ou diminuir suas consultas! ;)Às vezes,
tmp
é grande o suficiente, mas ainda fica cheio, você precisará fazer uma limpeza manual nessas situações.No segundo caso, existem problemas reais com os dados do MySQL. Se você puder inserir novamente os dados facilmente, recomendo apenas descartar / recriar a tabela e inserir novamente os dados. Se você não puder, tente consertar a mesa com a mesa REPAIR . É um processo geralmente demorado que pode muito bem falhar.
Veja a mensagem de erro completa que você recebe:
Ele menciona na mensagem que você pode tentar consertá-lo. Além disso, se você olhar o FILEPATH real que obtém, pode descobrir mais:
se for algo parecido
/tmp/#sql_ab34_23f
, significa que o MySQL precisa criar uma tabela temporária devido ao tamanho da consulta. Ele armazena em / tmp, e que não há espaço suficiente em seu / tmp para essa tabela temporária.se ele contiver o nome de uma tabela real, significa que essa tabela muito provavelmente está corrompida e você deve repará-la.
Se você identificar que seu problema é com o tamanho de / tmp, basta ler esta resposta a uma pergunta semelhante para a correção: MySQL, Erro 126: Arquivo de chave incorreto para a tabela .
fonte
Seguir essas instruções me permitiu recriar meu diretório tmp e corrigir o problema:
Exibir todos os sistemas de arquivos e seu uso de disco em formato legível por humanos:
Encontre os processos que têm arquivos abertos no
/tmp
Então umount
/tmp
e/var/tmp
:Em seguida, remova o arquivo de partição corrompido:
Em seguida, crie um novo bom:
Observe que, ao editar o script Perl securetmp, você pode definir manualmente o tamanho do diretório tmp, no entanto, apenas a execução do script aumentou o tamanho do diretório tmp em nosso servidor de aproximadamente 450 MB para 4,0 GB.
fonte
O erro # 126 geralmente ocorre quando você obtém uma tabela corrompida. A melhor maneira de resolver isso é fazer um reparo. Este artigo pode ajudar:
http://dev.mysql.com/doc/refman/5.0/en/repair-table.html
fonte
Eu tenho esse erro quando eu definir
ft_min_word_len = 2
emmy.cnf
, o que reduz o comprimento de palavra mínimo em um índice de texto completo para 2, a partir do padrão de 4.Reparar a mesa resolveu o problema.
fonte
Tente usar o limite em sua consulta. É por causa do disco cheio, como disse @Monsters X.
Também já enfrentei esse problema e resolvi pelo limite na consulta, pois os milhares de registros estavam lá. Agora funcionando bem :)
fonte
Eu sei que este é um tópico antigo, mas nenhuma das soluções mencionadas funcionou para mim. Eu fiz outra coisa que funcionou:
Você precisa:
fonte
fonte
Eu resolvi esse problema com:
Maio ajuda
fonte
table
ENGINE = MyISAM;Vá para
/etc/my.cnf
e comentetmpfs
Isso resolve o problema.
Executei o comando sugerido em outra resposta e, embora o diretório seja pequeno, estava vazio, portanto, o espaço não era o problema.
fonte
Tente executar um comando de reparo para cada uma das tabelas envolvidas na consulta.
Use o administrador do MySQL, vá para Catálogo -> Selecione seu Catálogo -> Selecione uma tabela -> Clique no botão Manutenção -> Reparar -> Usar FRM.
fonte
Agora, das outras respostas resolveu para mim. Acontece que renomear uma coluna e um índice na mesma consulta causou o erro.
Não está funcionando:
Trabalhos (2 afirmações):
Isso foi no MariaDB 10.0.20. Não houve erros com a mesma consulta no MySQL 5.5.48.
fonte
Então existe o erro obtido:
mysql> tabela de reparo f_scraper_banner_details;
Isso funcionou para mim
fonte
Meu problema veio de uma consulta ruim. Eu referenciei uma tabela em FROM não foi referenciada em SELECT.
exemplo:
, users u
é o que estava causando o problema para mim. Remover isso resolveu o problema.Para referência, isso foi em um ambiente de desenvolvimento CodeIgniter.
fonte
Recebi esta mensagem ao escrever em uma tabela depois de reduzir o ft_min_word_len (comprimento mínimo da palavra do texto completo). Para resolvê-lo, recrie o índice reparando a tabela.
fonte
mysqlcheck -r -f -uroot -p --use_frm db_name
normalmente fará o truque
fonte