A tabela MySQL está marcada como travada e o último reparo (automático?) Falhou


126

Eu estava reparando esta tabela repentinamente, o servidor travou e, quando voltei, todas as tabelas estão ok, mas esta mostra 'em uso' e, quando tento reparar, ela não prossegue.

ERRO 144 - A tabela './extas_d47727/xzclf_ads' está marcada como travada e o último reparo (automático?) Falhou

O que posso fazer para repará-lo?


1
Eu já vi isso acontecer principalmente quando o sistema de arquivos subjacente fica sem inodes livres. Verifique com df -hi. Geralmente algo está preenchendo-o com vários arquivos pequenos, como, por exemplo, arquivos de sessão php que não são limpos.
Zrin

Respostas:


260

Se o seu processo MySQL estiver em execução, pare-o. No Debian:

sudo service mysql stop

Vá para a sua pasta de dados. No Debian:

cd /var/lib/mysql/$DATABASE_NAME

Tente executar:

myisamchk -r $TABLE_NAME

Se isso não funcionar, você pode tentar:

myisamchk -r -v -f $TABLE_NAME

Você pode iniciar seu servidor MySQL novamente. No Debian:

sudo service mysql start

3
Eu tentei o comando acima, recebo este erro Não é possível criar um novo arquivo de temp: 'xzclf_ads.TMD'
CryptoMiningPoolSetupYiimp 12/12/12

2
Bem, o disco está realmente cheio? Você pode tentar executar "df -h"? Provavelmente é e você deve liberar algum espaço ... Durante o reparo da tabela, ele usa algum espaço em disco para gravar na tabela temporária. Como você pode ver a partir da mensagem de erro que escreve para o seu / tmp / pasta
Aleksandar Vucetic

13
Eu tive que navegar /var/lib/mysql/<database>e correr myisamchk -r -v -f ./<table name>.
Linus Oleander

5
Eu tenho um myisam_sort_buffer_size is too smallerro, então este comando funcionou para mim:myisamchk -r -v --sort_buffer_size=2G <table_name>
dusan

1
Uau, eu pensei que todo o meu site era mangueira Uma correção tão simples. Você é meu herói!
Anthony

105

Tente executar a seguinte consulta:

repair table <table_name>;

Eu tive o mesmo problema e isso me resolveu o problema.


Esta foi uma solução rápida! Tinha uma tabela de opções "ruim". Certifique-se de selecionar o banco de dados correto primeiro!
precisa saber é o seguinte

12

Se lhe der negação de permissão ao mover para / var / lib / mysql, use a seguinte solução

$ cd /var/lib/
$ sudo -u mysql myisamchk -r -v -f mysql/<DB_NAME>/<TABLE_NAME>

4

Eu precisava adicionar USE_FRM à instrução de reparo para fazê-la funcionar.

REPAIR TABLE <table_name> USE_FRM;

3

Eu tenho myisamchk: error: myisam_sort_buffer_size is too smallcomo erro.

A solução

myisamchk -r -v mysql/<DB_NAME>/<TABLE_NAME> --sort_buffer_size=2G

2

Vá para data_dire remova o Your_table.TMParquivo após reparar a <Your_table>tabela.


Onde está data_dir?
CMCDragonkai

1
procure-o com este comando grep -r datadir /etc/mysql/. Deve estar /var/lib/mysqlsob debian e ubuntu.
ThorstenS

1

Esta é uma solução 100%. Eu mesmo tentei.

myisamchk -r -v -f --sort_buffer_size = 128M --key_buffer_size = 128M / var / lib / mysql / databasename / tabloname


0

Tentei as opções nas respostas existentes, principalmente a marcada como correta, que não funcionou no meu cenário. No entanto, o que funcionou foi usar o phpMyAdmin. Selecione o banco de dados e, em seguida, selecione a tabela. No menu suspenso, selecione "Reparar tabela".

  • Tipo de servidor: MySQL
  • Versão do servidor: 5.7.23 - MySQL Community Server (GPL)
  • phpMyAdmin: Informações da versão: 4.7.7
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.