MySQL Repair MyISAM Table – BozulmuşTabloların Onarılması
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYw6UL7o' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Herhangi bir nedenden dolayı MySQL databaseinizdeki herhangi bir myisam tablo bozulursa loglarınızda vs. aşağıdakine benzer bir uyarı görebilirsiniz.
Table 'tablo_adi' is marked as crashed and should be repaired
Hatada bahsedilen repair işlemi bir kaç şekilde yapılabilir, Yöntemlerden birisi myisamcheck isimli table maintanence aracını kullanmaktır. myisamcheck MySQL ile birlikte gelen ve myisam tabloları kontrol etmeye, onarmaya ya da optimize etmeye yarayan küçük bir uygulamadır.
Örnek olarak mydb isimli bir databaser’imiz olduğunu düşünürsek bu db’deki myisam tabloları bozulmaya karşı kontrol etmek için myisamcheck’i şu şekilde kullanabiliriz:
# myisamchk /var/lib/mysql/mydb/*.MYI
Bu şekilde MySQL’in default data dizini olan /var/lib/mysql/ dizini altındaki mydb isimli database klasoru altında bulunan MYI dosyaları taranarak kontrol edilir.
Eğer corrupt olan tablo ya da tablolarınız varsa komutun çıktısında aşağıdakine benzer satırlar görürsünüz:
myisamchk: error: Wrong bytesec: 0-0-0 at linkstart: 1592412 MyISAM-table 'mydb/mytable.MYI' is corrupted Fix it using switch "-r" or "-o"
Bu örneğe göre mytable isimli tablo corrupt olmuş görünmekte ve fix edilmesi için -r ya da -o parametrelerinin kullanılması söylenmekte.
myisamcheck’in -r parametresi recover et anlamına gelmektedir ve onarmak için ilk olarak kullanılması gereken parametredir dolayısı ile ilgili tabloyu -r ile recover etmek için komutu şu şekilde kullanıyoruz:
# myisamchk -r /var/lib/mysql/mydb/mytable.MYI
Bu şekilde tablo repair edilecek ve aşağıdaki gibi bir çıktı alınacaktır:
- recovering (with sort) MyISAM-table 'mydb/mytable.MYI' Data records: 8392 - Fixing index 1 - Fixing index 2 - Fixing index 3 Data records: 8392
Recover işleminden sonra aynı tabloyu tekrar check ettiğiniz zaman tablonun aşağıda görüldüğü şekilde onarılmış olduğunu görmeniz gerekir.
Checking MyISAM file: mydb/mytable.MYI Data records: 8392 Deleted blocks: 0 - check file-size - check record delete-chain - check key delete-chain - check index reference - check data record references index: 1 - check data record references index: 2 - check data record references index: 3 - check record links
-r parametresi ile onarma işleminin başarılı olmaması durumunda ise aynı komutu -o parametresi ile de çalıştırabilirsiniz. -o safe-recover demektir ve tüm rowları tek tek okuduğundan dolayı daha yavaştır ancak -r parametresinin onarımı beceremediği durumlarda kullanılabilir.
Parametrelerle ilgili detayları http://dev.mysql.com/doc/refman/5.6/en/myisamchk-repair-options.html adresinde de bulabilirsiniz
Bu yazılar da ilginizi çekebilir:
- MySQL Full-Text Search Minimum Length Limitini Değiştirmek
- MySQL: InnoDB Database Ebatının Küçültülmesi – Shrink ibdata1
- MySQL Database Schema Export
- MySQLdump – InnoDB single-transaction ve quick dump
- Mysql Data Dizininin Yerinin Değiştirilmesi
Yorumlar
Trackbacks
- MySqL Repair Table » Çaylaks Blog
- MySQL Repair Table « ÇaylakS BloG
Yorumda bulunun.