Appservde çalıştırdığım firmaya ait müşteri takip scriptinin harddiskten oluşan hatadan dolayı full backup ile tekrar kurmaya çalıştığımda mysql yedeğini alamadım ve data klasöründe bulunan .ibd ve .frm dosyaları ile yedeği kurtarmaya çalıştığım ve uzun uğraş sonucu sağdan soldan bulduğum bilgilerin ortak sonucu olarak çözdüğüm yöntemi paylaşmak istedim.
data klasörü içerisinde veritabanı adınıza ait bir klasör bulunuyor. Tablo dosyalarıda .ibd. ve .frm uzantılı olarak burada bulunmakta.
Klasör yedeğini attığınızda phpmyadminde veritabanı ve tabloları görünüyor fakat içeriğine tıklayınca ya kullanımda yazıyor yada Table doesnt exist hatası veriyor.
Bunun için yeni temiz bir Appserv kurulumu yaptım.
Bunun için ilk önce tablodaki sütun isimlerini okumak için MySQL Utilities. gerekiyor. İndirip kurduktan sonra kurulum yapılan dizine bir klasör açıp içerisine .frm dosyalarını atın.
Sonra MySQL Utilities Console çalıştırın.
Komut satırına ilk tablo adından başlayın.
mysqlfrm --diagnostic klasoradi/admin.frmsize çıktı olarak tablonuzun sütun isimlerini verecek ve bunun ile tabloyu yeniden oluşturacağız.
Örnek;
CREATE TABLE `admin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(150) NOT NULL, `password` varchar(600) NOT NULL, `durum` smallint(6) NOT NULL, `yetki` int(11) NOT NULL, PRIMARY KEY `PRIMARY` (`id`) ) ENGINE=InnoDB;çıktıyı kopyalayıp phpmyadminden mevcut veritabanı adınız ile veritabanı oluşturun. Sonra sql kısmından kopyaladığınız çıktıyı çalıştırın.
Tablo oluştuktan sonra yine sql kısmından
ALTER TABLE tabloadi DISCARD TABLESPACE;çalıştırınız.
yedeklediğiniz data klasöründeki aynı isimdeki .ibd dosyasını kopyalayıp yeni data dosyasındaki veritabanı klasörüne yapıştırın. Zaten orada oluşturduğunuz aynı isimdeki yeni tablo .frm dosyasını göreceksiniz.
.idb dosyasını taşıdıktan sonra tekrar sql kısmından
ALTER TABLE tabloadi IMPORT TABLESPACE;çalıştırdığınızda artık tabloya girdiğinizde verilerinizi görebileceksiniz.
Kısacası mantık; Her .frm dosyasını MySQL Utilities Console ile okuyacaksınız. Verdiği çıktıyla phpmyadminden sql sorgusu ile tabloyu oluşturacaksınız. İlk komut ile veritabanı .ibd dosyasını siliyorsunuz. Sonra yedeğinizdeki .idb dosyasını yeni klasöre taşıyorsunuz. İkinci komut ile tekrar tabloya yüklüyorsunuz hepsi bu kadar.
Umarım paylaşım yardımcı olur.