Aşağıdaki çalışma " Yüksek Performanslı MySQL, İkinci Baskı " kitabından çıktı .
Bu mükemmel bir kitap ve herkese tavsiye ederim.
Kısa cevap:
Masa boyutunuz ve koşullarınızla, hangi yöntemi seçerseniz seçin, potansiyel olarak uzun süre beklediğinizi düşünüyorum.
Tablo Dönüşümleri
Bir tabloyu bir depolama motorundan diğerine dönüştürmenin, her birinin avantajları ve dezavantajları olan birkaç yolu vardır.
TABLOYU DEĞİŞTİR
mysql> ALTER TABLE mytable ENGINE = Falcon;
Bu sözdizimi tüm depolama motorları için çalışır, ancak bir yakalama vardır: çok zaman alabilir. MySQL, eski tablonuzun satır satır kopyasını yeni bir tabloya uygulayacaktır. Bu süre zarfında, muhtemelen sunucunun tüm disk G / Ç kapasitesini kullanırsınız ve dönüştürme işlemi sırasında orijinal tablo okuma kilitlenir.
Döküm ve içe aktarma
Dönüştürme işlemi üzerinde daha fazla denetim sahibi olmak için, önce mysqldump yardımcı programını kullanarak tabloyu bir metin dosyasına dökmeyi seçebilirsiniz. Tabloyu döktükten sonra, içerdiği CREATE TABLE ifadesini ayarlamak için döküm dosyasını düzenleyebilirsiniz. Tablo türünü ve türünü değiştirdiğinizden emin olun, çünkü farklı türlerde olsalar bile aynı veritabanında aynı ada sahip iki tablonuz olamaz ve mysqldump, CREATE TABLE'dan önce bir DROP TABLE komutu yazmayı varsayılan olarak kullanır , bu yüzden dikkatli değilseniz verilerinizi kaybedebilirsiniz!
OLUŞTUR ve SEÇ
Üçüncü dönüşüm tekniği, birinci mekanizmanın hızı ile ikincisinin güvenliği arasında bir uzlaşmadır. Tüm tabloyu boşaltmak veya hepsini bir kerede dönüştürmek yerine, yeni tabloyu oluşturun ve aşağıdaki gibi doldurmak için MySQL'in INSERT ... SELECT sözdizimini kullanın:
mysql> CREATE TABLE innodb_table LIKE myisam_table;
mysql> ALTER TABLE innodb_table ENGINE=InnoDB;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table;
Çok fazla veri yoksa, bu iyi çalışır, ancak eğer yaparsanız, tabloyu kademeli olarak doldurmak, her yığın arasındaki işlemi gerçekleştirerek geri alma günlüklerinin çok fazla büyümemesi genellikle daha etkilidir. Bu kimliğin birincil anahtar olduğunu varsayarsak, tüm verileri yeni tabloya kopyalayana kadar bu sorguyu tekrar tekrar çalıştırın (her seferinde daha büyük x ve y değerlerini kullanarak):
mysql> START TRANSACTION;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql> COMMIT;
Bunu yaptıktan sonra, işiniz bittiğinde bırakabileceğiniz orijinal tablo ve şimdi tamamen doldurulmuş yeni tablo ile kalacaksınız. Verilerin tutarsız bir kopyasını almayı önlemek için gerekirse orijinal tabloyu kilitlemeye dikkat edin!