Skip to content

MySQL: Failed Registration of InnoDB as a Storage Engine

Bu hatayı sayısız kez ve bir çok sebepten ötürü alabilirsiniz.  MySQL Failed! Ufak ayar değişikliklerinden sonra MySQL sunucusunu çalıştırmayı veya yeniden başlatmayı denediğinizde MySQL başlamayı reddeder. Veya, başlasa bile bazı önemli özelliklerinden yoksun başlar, mesela InnoDB desteği olmadan başlar.

Aşağıdaki resimdeki görüntü bir çok Linux kullanıcısına oldukça tanıdık gelecektir :) :

mysql_blog_post

Bazı ayar değişikliklerinizden sonra MySQL’i tekrar başlatırken hata alacaksınız fakat neden? Bazı değişiklikler, kayıt dosyalarının boyutu gibi, bu hatalara sebep olabilirler.

Bazen bu hatalar çok can sıkıcı olabilir, özellikle nereye bakmanız gerektiğine dair bir ipucunuz yoksa.

MySQL Kayıt Tutma

MySQL’in çeşitli kayıt dosyaları vardır. Sorgu kayıtları, bağlantı kayıtları, hata kayıtları, binary kayıtları, yavaş çalışan sorgu kayıtları vb.

Bu bağlamda, ayar değişiklikleri yaptığınızda eğer MySQL başlamıyorsa neden başlatılamadığına dair ipuçlarını size hata kayıtları söyleyecektir. Bu hata kayıtları eğer my.cnf(log-error = /var/….) dosyasından değiştirmediyseniz genellikle /var/lib/mysql dizininde bulunur.

InnoDB Kayıt Dosyaları

InnoDB kayıt dosyalarının büyüklüklerinin değiştirilmesi MySQL sunucusunun tekrar başlatılamamasından yaygın ayar değişikliklerinden biridir. InnoDB kayıt dosyası bir nevi InnoDB depolama motoru için kurtarma dosyasıdır. Bu dosya MySQL tablosuna işlenen fakat henüz diske yazılmamış işlemleri içerir. MySQL çökerse ve tampon havuzundanki(buffer pool) veriyi kaybedersen bu dosyalar sayesinde kaybolan veriyi kurtarır ve diske yazılmasını sağlar.

my.cnf dosyası InnoDB kayıt dosyalarıyla ilgili bir kaç seçenek sunar. Fakat bu yazıda mevzu bahis problemi ilgilendiren seçenek innodb_log_file_size‘dır. Bu seçenek InnoDB kayıt dosyası boyutunu belirtmemize imkan sunar.

InnoDB Depolama Motoru Tanımlanamadı

Ayar dosyasını kurcalayan kişiler genellikle istem dışı olarak bu seçeneği değiştirmek isterler. Hatta daha fazla veriyi tutayım, garanti olsun mantalitesine giderek değeri artırırlar ve MySQL’i yeniden başlatırlar. Normal ve basit bir prosedür izlenmesine rağmen MySQL başlarken hata verecektir. MySQL bu durumu sizi korkutsa da artık hata kayıtlarından haberdarsınız. MySQL hata kayıtlarına baktığınızda problemin InnoDB kayıt dosyalarının boyutlarıyla ilgili bir problem olduğunu gördünüz.

innodb_log_file_size seçeneğini değiştirdiğinizde aşağıdakine benzer bir hata alırsınız:

110509 12:04:27 InnoDB: Initializing buffer pool, size = 384.0M
 110509 12:04:27 InnoDB: Completed initialization of buffer pool
 InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
 InnoDB: than specified in the .cnf file 0 157286400 bytes!
 110509 12:04:27 [ERROR] Plugin 'InnoDB' init function returned error.
 110509 12:04:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
 110509 12:04:27 [ERROR] Unknown/unsupported table type: innodb
 110509 12:04:27 [ERROR] Aborting

110509 12:04:27 [Note] /usr/sbin/mysqld: Shutdown complete

Bu problemin iki adet çözümü bulunmaktadır:

  • my.cnf dosyasını eski haline getirmek. En azından innodb_log_file_size seçeneğini eski değerine getirin.
  • ./ib_logfile0 ve ./ib_logile1 isimli dosyalarının ismini değiştirin veya başka bir konuma taşıyın. Daha sonra MySQL sunucusunu rahatlıkla yeniden başlatabilirsiniz. Bu dosyalar genellikle /var/lib/mysql klasöründe bulunur.

Orjinal InnoDB kayıt dosyalarını mümkün olduğunca uzun bir süre silmemeye çalışın; veri kurtarma ihtiyacınız doğma ihtimaline karşı. Temennim odur ki böyle bir ihtiyacınız hiç olmasın :)

Umarım faydalı bir yazı olmuştur, herkese keyifli günler dilerim,

TR Kodlama GitHub'da!

TR Kodlama'da yer alan makaleleri GitHub üzerinden düzenleyebileceğinizi biliyor muyudunuz? Harika değil mi? Bu makale ile ilgili düzenleme yapmak isterseniz aşağıdaki butona tıklayınız!

GitHub'da Görüntüle ve Düzenle!