La tabella MySQL è contrassegnata come bloccata e l'ultima riparazione (automatica?) Non è riuscita


126

Stavo riparando questo tavolo improvvisamente il server si è impiccato e quando sono tornato indietro tutti i tavoli erano ok ma questo mostrava "in uso" e quando provo a riparare non procede.

ERRORE 144 - La tabella "./extas_d47727/xzclf_ads" è contrassegnata come bloccata e l'ultima riparazione (automatica?) Non è riuscita

Cosa posso fare per ripararlo?


1
Ho visto che questo accade principalmente quando il file system sottostante esce dagli inode liberi. Verificare con df -hi. Di solito qualcosa lo riempie di carichi di piccoli file, come ad esempio file di sessione php che non vengono ripuliti.
Zrin

Risposte:


260

Se il tuo processo MySQL è in esecuzione, interrompilo. Su Debian:

sudo service mysql stop

Vai alla tua cartella dati. Su Debian:

cd /var/lib/mysql/$DATABASE_NAME

Prova a correre:

myisamchk -r $TABLE_NAME

Se non funziona, puoi provare:

myisamchk -r -v -f $TABLE_NAME

Puoi riavviare il tuo server MySQL. Su Debian:

sudo service mysql start

3
Ho provato il comando precedente Ottengo questo errore Non è possibile creare un nuovo file temporaneo: 'xzclf_ads.TMD'
CryptoMiningPoolSetupYiimp

2
Bene, il disco è davvero pieno? Puoi provare a eseguire "df -h"? Molto probabilmente lo è e dovresti liberare un po 'di spazio ... Durante la riparazione della tabella, utilizza un po' di spazio su disco per scrivere nella tabella temporanea. Come puoi vedere dal messaggio di errore che scrive nella tua cartella / tmp /
Aleksandar Vucetic

13
Ho dovuto navigare /var/lib/mysql/<database>e correre myisamchk -r -v -f ./<table name>.
Linus Oleander

5
Ho un myisam_sort_buffer_size is too smallerrore, quindi questo comando ha funzionato per me:myisamchk -r -v --sort_buffer_size=2G <table_name>
dusan

1
Wow, pensavo che il mio intero sito web fosse stato ripulito. Una soluzione così semplice. Tu sei il mio eroe!
Anthony

105

Prova a eseguire la seguente query:

repair table <table_name>;

Ho avuto lo stesso problema e mi ha risolto il problema.


Questa è stata una soluzione rapida! Aveva un "cattivo" tavolo delle opzioni. Assicurati di selezionare prima il database corretto!
jyllstuart

12

Se ti dà il permesso di negare il tuo passaggio a / var / lib / mysql, usa la seguente soluzione

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

4

Avevo bisogno di aggiungere USE_FRM all'istruzione di riparazione per farlo funzionare.

REPAIR TABLE <table_name> USE_FRM;

3

Ho ricevuto un myisamchk: error: myisam_sort_buffer_size is too smallerrore.

La soluzione

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

2

Vai a data_dire rimuovi il Your_table.TMPfile dopo aver riparato la <Your_table>tabella.


Dov'è data_dir?
CMCDragonkai

1
cercalo con questo comando grep -r datadir /etc/mysql/. Dovrebbe essere /var/lib/mysqlsotto Debian e Ubuntu.
ThorstenS

1

Questa è una soluzione al 100%. L'ho provato io stesso.

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


0

Ho provato le opzioni nelle risposte esistenti, principalmente quella contrassegnata come corretta che non ha funzionato nel mio scenario. Tuttavia, ciò che ha funzionato è stato utilizzare phpMyAdmin. Seleziona il database e poi la tabella, dal menu a tendina in basso seleziona "Ripara tabella".

  • Tipo di server: MySQL
  • Versione server: 5.7.23 - MySQL Community Server (GPL)
  • phpMyAdmin: Informazioni sulla versione: 4.7.7
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.