Bir MyISAM tablosunun çökmesi oldukça kolaydır.
Her MyISAM tablosunun başlığında, tabloya karşı kaç açık dosya tanıtıcısı bulunduğunu izleyen bir sayaç bulunur.
Mysql'yi başlatırsanız ve üstbilgideki sayı, gerçek dosya tanıtıcılarının sayısıyla eşleşmezse, mysqld tabloyu çökmüş olarak ele alır.
Bir basit REPAIR TABLE mdl_user
, veri kaybı olmadan her seferinde tekrar çalışmasını sağlarsa, bu, çok trafik işlemleri yapılan bir siteye sahip olduğunuzu gösterebilir mdl_user
.
Düzinelerce tablo bunu gerektiriyorsa REPAIR TABLE
, tüm tabloları InnoDB dönüştürür. Ancak, mdl_user
tablo bu soruna sahip tek tablo ise, yapabileceğiniz bir şey vardır (bu örnek için veritabanının olduğunu varsayalım moodle
);
Tüm tabloların MyISAM olarak kalmasını istiyorsanız
ADIM 01: Onarım Tablosu Komut Dosyası Oluşturma
echo "REPAIR TABLE moodle.mdl_user;" > /var/lib/mysql/MoodleStartUp.sql
ADIM 02: Onarım Komut Dosyasını başlangıç dosyası olarak bildirin
Bunu /etc/my.cnf dosyasına ekle
[mysqld]
init-file=/var/lib/mysql/MoodleStartUp.sql
ADIM 03: MySQL'i yeniden başlat
MySQL'in her yeniden başlatılması, Onarım Tablosu Komut Dosyasını tetikler
Tüm tabloların InnoDB olmasını istiyorsanız
MyISAM tablolarının InnoDB'ye toplu dönüştürme komut dosyası yapmak için bu kodu çalıştırın ve görüntüleyin
MYSQL_USER=root
MYSQL_PASS=password
MYSQL_CONN="-u${MYSQL_USER} -p ${MYSQL_PASS}"
echo "SET SQL_LOG_BIN = 0;" > /root/ConvertMyISAMToInnoDB.sql
mysql ${MYSQL_CONN} -A --skip-column-names -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') InnoDBConversionSQL FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql','performance_schema') ORDER BY (data_length+index_length)" > /root/ConvertMyISAMToInnoDB.sql
less /root/ConvertMyISAMToInnoDB.sql
Dönüşüm komut dosyasının içeriğinden memnun olduğunuzda, çalıştırın
mysql ${MYSQL_CONN} < /root/ConvertMyISAMToInnoDB.sql
GÜNCELLEME 2012-03-15 14:00 EDT
@Kevin , MyISAM kullanırken, Disk Alanı yetersizse sorununuz nedir?
Dikkate alınması gereken bir nokta: MySQL 5.0 Sertifikasyon Çalışması Kılavuzu'na göre ,
madde işareti # 11 , Sayfa 408.409 Bölüm 29.2'de aşağıdakileri söylüyor:
MyISAM tablosuna satır eklerken disk alanınız tükenirse, hata oluşmaz. Sunucu, kullanılabilir alan elde edilene kadar işlemi askıya alır ve ardından işlemi tamamlar.
Disk alanınız bittiğinde, sadece mysql'yi kapatmayın veya öldürmeyin. Halen kullanılan MyISAM'deki açık dosya tanıtıcılarının sayısı silinmeyecektir. Böylece, MyISAM tablosu çöktü olarak işaretlenir. Mysqld hala çalışırken veri birimindeki disk alanını boşaltabilirseniz, disk alanı kullanılabilir duruma geldiğinde mysqld çalışır.