2012-01-12 17 views
96

Stavo riparando questo tavolo in modo anomalo server impiccato e quando sono tornato indietro tutti i tavoli sono ok ma questo mostra 'in uso' e quando provo a ripararlo doesn procedere.La tabella mysql è contrassegnata come bloccata e l'ultima riparazione (automatica?) Fallita

ERROR 144 - Table './extas_d47727/xzclf_ads' is marked as crashed and last (automatic?) repair failed 

Cosa posso fare per ripararlo?

+0

L'ho visto accadere soprattutto quando il file system sottostante esce da inode gratuiti. Controlla con df -hi. Di solito qualcosa lo sta riempiendo con un sacco di piccoli file, come ad es. file di sessione php che non vengono ripuliti. – Zrin

risposta

189

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

sudo service mysql stop 

Vai alla tua cartella di dati. Su Debian:

cd /var/lib/mysql/$DATABASE_NAME 

prova ad eseguire:

myisamchk -r $TABLE_NAME 

Se questo non funziona, si può provare:

myisamchk -r -v -f $TABLE_NAME 

si può iniziare nuovamente il server MySQL. Su Debian:

sudo service mysql start 
+1

Ho provato il comando precedente Ho ricevuto questo errore Impossibile creare un nuovo tempfile: 'xzclf_ads.TMD' – GoodtheBesT

+1

Prova con queste altre opzioni dalla mia risposta aggiornata. –

+0

Grazie, ho provato a funzionare ma ho smesso di dare questo errore? "myisamchk: Il disco è in scrittura completa '/ tmp/STp7Q4qR' (Errcode: 28) .aspettando che qualcuno liberi lo spazio ... (attendere fino a 60 secondi di ritardo affinché il server continui dopo aver liberato spazio sul disco) myisamchk: Riprova in 60 secondi Messaggio ristampato in 600 secondi " – GoodtheBesT

12

Se si dà il permesso negazione mentre si muove/var/lib/mysql utilizzare per la seguente soluzione

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

Provare a eseguire la seguente query:

repair table <table_name>; 

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

+4

Soluzione semplice e perfetta :) –

+1

soluzione perfetta risolto il mio problema ... – SINGH

+3

salva vita! Il modo più semplice per risolverlo +1 – JohnA10

3

Passare a data_dir e rimuovere il file Your_table.TMP dopo aver riparato la tabella <Your_table>.

+0

Dov'è 'data_dir'? – CMCDragonkai

+0

cerca con questo comando 'grep -r datadir/etc/mysql /'. Dovrebbe essere '/ var/lib/mysql' sotto debian e ubuntu. – ThorstenS

3

Ho ricevuto myisamchk: error: myisam_sort_buffer_size is too small come errore.

La soluzione

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

avevo bisogno di aggiungere USE_FRM alla dichiarazione di riparazione per farlo funzionare.

REPAIR TABLE <table_name> USE_FRM;