İşte bu yüzden MySQL bu dosyaları göremiyor: Sistem tablo alanı (ibdata1), InnoDB'nin potansiyel tablo kullanımını belirlemesini sağlayan bir Depolama Motoruna özel veri sözlüğüne sahip:
InnoDB tablolarını bir yerden bir yere taşımak, aşağıdaki gibi komutları gerektirir:
ALTER TABLE tblname DISCARD TABLESPACE;
ALTER TABLE tblname IMPORT TABLESPACE;
İşte dikkat edilmesi gerekenleri açıklayan MySQL 5.5 Belgeleri'nin bir parçası
.İbd Dosyaları için Taşınabilirlik Hususları
.İbd dosyalarını MyISAM tablo dosyalarıyla olduğu gibi veritabanı dizinleri arasında özgürce taşıyamazsınız. InnoDB paylaşılan tablo alanında depolanan tablo tanımı, veritabanı adını içerir. Tablo alanı dosyalarında saklanan işlem kimlikleri ve günlük sıra numaraları da veritabanları arasında farklılık gösterir.
Bir .ibd dosyasını ve ilişkili tabloyu bir veritabanından diğerine taşımak için, bir RENAME TABLE ifadesi kullanın:
RENAME TABLO db1.tbl_name TO db2.tbl_name; Bir .ibd dosyasının “temiz” bir yedeğine sahipseniz, onu kaynaklandığı MySQL kurulumuna geri yükleyebilirsiniz:
.İbd dosyasını kopyaladığınızdan beri tablonun düşürülmemesi veya kesilmemesi gerekir, çünkü bunu yaparken tablo alanı içinde depolanan tablo kimliği değişir.
Geçerli .ibd dosyasını silmek için bu ALTER TABLE ifadesini verin:
ALTER TABLE tbl_name DISCARD TABLESPACE; Yedekleme .ibd dosyasını uygun veritabanı dizinine kopyalayın.
InnoDB'ye tablo için yeni .ibd dosyasını kullanmasını söylemek için bu ALTER TABLE ifadesini verin:
ALTER TABLE tbl_name İTHALAT TABLESPACE; Bu bağlamda, “clean” .ibd dosya yedeği, aşağıdaki gereksinimlerin karşılandığı bir tanesidir:
.İbd dosyasındaki işlemler tarafından henüz tadilat edilmemiş herhangi bir değişiklik yoktur.
.İbd dosyasında birleştirilmemiş ekleme tampon girişi yok.
Temizleme, silinen tüm işaretlenmiş dizin kayıtlarını .ibd dosyasından kaldırdı.
mysqld, .ibd dosyasının bütün değiştirilmiş sayfalarını arabellek havuzundan dosyaya siler.
Bu uyarılar ve protokoller göz önüne alındığında, burada önerilen bir eylem süreci
Bu örnekte, tags
tabloyu mydb
veritabanına geri yüklemeyi deneyelim
AŞAMA 1
Bunların .frm
ve .ibd
dosyaların yedeğini aldığınızdan emin olun ./tmp/innodb_data
ADIM 2
İfadeyi alın CREATE TABLE tags
ve olarak çalıştırın CREATE TABLE mydb.tags ...
. Orijinal ile aynı yapı olduğundan emin oluntags.frm
AŞAMA 3
tags.ibd
MySQL kullanarak boş sil
ALTER TABLE mydb.tags DISCARD TABLESPACE;
ADIM # 4
Yedek kopyasını getir tags.ibd
cd /var/lib/mysql/mydb
cp /tmp/innodb_data.tags.ibd .
chown mysql:mysql tags.ibd
ADIM 5
tags
InnoDB Veri Sözlüğüne tablo ekle
ALTER TABLE mydb.tags IMPORT TABLESPACE;
ADIM 6
Tablonun erişilebilirliğini test edin
SHOW CREATE TABLE mydb.tags\G
SELECT * FROM mydb.tags LIMIT 10;
Normal sonuçlar elde ederseniz, tebrikler InnoDB tablosunu içe aktardığınız için.
ADIM 7
Gelecekte, lütfen ibdata1 ve loglarını silmeyin
Bir şans ver !!!
Daha önce böyle şeyler tartıştım
UYARI
Ya masa yapısını bilmiyorsanız tags
?
Sadece .frm
dosyayı kullanarak CREATE TABLE deyimini almak için araçlar vardır . Bununla ilgili bir yazı da yazdım: Tablo şemasını sadece .frm dosyasından nasıl çıkarabilirim? . Bu yazımda, bir .frm dosyasını bir Linux makinesinden Windows makinesine kopyaladım, Windows aracını çalıştırdım ve ifade aldım CREATE TABLE
.