MySQL tablosu çöktü olarak işaretlendi ve son (otomatik?) Onarım başarısız oldu


126

Bu tabloyu tamir ediyordum aniden sunucu takıldı ve geri döndüğümde tüm tablolar tamam ama bu 'kullanımda' gösteriyor ve onarmaya çalıştığımda devam etmiyor.

HATA 144 - Tablo './extas_d47727/xzclf_ads' kilitlendi ve son (otomatik?) Onarım başarısız olarak işaretlendi

Tamir etmek için ne yapabilirim?


1
Bunun çoğunlukla temel dosya sistemi ücretsiz inode'lardan çıktığında gerçekleştiğini gördüm. Df -hi ile kontrol edin. Genellikle bir şey onu bir sürü küçük dosyayla doldurur, örneğin temizlenmeyen php oturum dosyaları gibi.
Zrin

Yanıtlar:


260

MySQL işleminiz çalışıyorsa, durdurun. Debian'da:

sudo service mysql stop

Veri klasörünüze gidin. Debian'da:

cd /var/lib/mysql/$DATABASE_NAME

Koşmayı deneyin:

myisamchk -r $TABLE_NAME

Bu işe yaramazsa, deneyebilirsiniz:

myisamchk -r -v -f $TABLE_NAME

MySQL sunucunuzu yeniden başlatabilirsiniz. Debian'da:

sudo service mysql start

3
Yukarıdaki komutu denedim Bu hatayı alıyorum Yeni geçici dosya oluşturamıyorum: 'xzclf_ads.TMD'
CryptoMiningPoolSetupYiimp

2
Peki, disk gerçekten dolu mu? "Df -h" çalıştırmayı deneyebilir misin? Büyük olasılıkla öyle ve biraz alan boşaltmalısınız ... Tablo onarımı sırasında, geçici tabloya yazmak için biraz disk alanı kullanır. Hata mesajından da görebileceğiniz gibi / tmp / klasörünüze yazıyor
Aleksandar Vucetic

13
Gitmek /var/lib/mysql/<database>ve koşmak zorunda kaldım myisamchk -r -v -f ./<table name>.
Linus Oleander

5
Bir myisam_sort_buffer_size is too smallhata aldım , bu yüzden bu komut benim için çalıştı:myisamchk -r -v --sort_buffer_size=2G <table_name>
dusan

1
Vay canına, tüm web sitemin ıslandığını sanıyordum Böyle basit bir düzeltme. Kahramanımsın!
Anthony

105

Aşağıdaki sorguyu çalıştırmayı deneyin:

repair table <table_name>;

Ben de aynı sorunu yaşadım ve bu bana sorunu çözdü.


Bu hızlı bir çözümdü! "Kötü" seçenekler tablosu vardı. Önce doğru veritabanını seçtiğinizden emin olun!
jyllstuart

12

/ Var / lib / mysql konumuna taşınırken size izin reddi verirse, aşağıdaki çözümü kullanın

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

4

Çalışması için onarım bildirimine USE_FRM eklemem gerekiyordu.

REPAIR TABLE <table_name> USE_FRM;

3

myisamchk: error: myisam_sort_buffer_size is too smallHata olarak aldım .

Çözüm

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

2

Tabloyu onardıktan sonra dosyaya gidin data_dirve Your_table.TMPdosyayı kaldırın <Your_table>.


Nerede data_dir?
CMCDragonkai

1
bu komutla arayın grep -r datadir /etc/mysql/. /var/lib/mysqlDebian ve ubuntu altında olmalı .
ThorstenS

1

Bu% 100 bir çözümdür. Ben kendim denedim.

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


0

Mevcut cevaplardaki seçenekleri denedim, esasen senaryomda işe yaramayan doğru olarak işaretlenmiş olanı. Ancak, işe yarayan şey phpMyAdmin kullanmaktı. Veritabanını seçin ve ardından tabloyu seçin, alttaki açılır menüden "Tabloyu onar" ı seçin.

  • Sunucu türü: MySQL
  • Sunucu sürümü: 5.7.23 - MySQL Community Server (GPL)
  • phpMyAdmin: Sürüm bilgisi: 4.7.7
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.