2012-04-06 18 views
5

Yalnızca bir varsayılan myisam sunucusunda varsayılan yapılandırmada çalışan 32 GB RAM mysql sunucum var. Masa kilitlerini önlemek için motor tipini bir tablonun InnoDB'sine değiştirmek istiyorum. Diskte 50 milyon kayıt var ve boyutu 15 GB civarında. Ben mysql sürüm 5.5 kullanıyorum Aşağıdaki seçenekleri eklemek ve mysql yeniden başlatmanız gerekecek sanırım.Tablo türünü InnoDB olarak değiştirme

innodb_buffer_pool_size=1G 
innodb_log_file_size=100M 
innodb_file_per_table=1 
motor tipini değiştirirken gerekli olarak kabul edilir başka ne

?

cevap

13

Aslında her tabloyu dönüştürmek için bir komut çalıştırıyorsunuz. Sonra

ALTER TABLE tablename ORDER BY primary_key_column; 

alter komutunu çalıştırın:

İlk tablosunu sıralamak için daha hızlı gider tablosu gerçekten büyükse biraz zaman alabilir

ALTER TABLE tablename ENGINE = INNODB; 

ve kullanacak İşlemcinizin birçoğu ....

+0

Sorunun, my.cnf yapılandırmasında yapılan değişikliklerin geçerli cnf'nin innodb ile ilgili parametresi olmadığı için yapılması gerektiğidir. – shantanuo

+0

Aşağıdaki çözüm, my.cnf dosyanızda daha fazla değişiklik yapmanız gerekip gerekmediğini söyleyen "MOTORLARI GÖSTER" seçeneğini önerir. Öyleyse, "skip-innodb" yorumunun açık olduğundan emin olun. Mysql motorunuzu yeniden zarif bir şekilde yeniden başlatmayı unutmayın. –

+0

Bu durumda InnoDB varsayılan olarak çalışır. Sorum şu, varsayılanların ne değişmesi gerektiğiyle ilgilidir. Yoksa varsayılan ayarda uzun vadede iyi çalışır mı? En önemli 3 parametreyi kısa listeye aldım, daha çok bilmek istedim. – shantanuo

7

Veritabanınızın InnoDB motorunu destekleyip desteklemediğini kontrol edin (desteklediğine bahis yapıyorum;)):

SHOW ENGINES\G 

yüzden, zaten orada, yerinde innodb related parameters varsayılan ile onları kontrol edilirse:

SHOW VARIABLES LIKE '%innodb%' 

ve onları anlamak ve belirli ihtiyaçlara değiştirmeye çalışın. Varsayılan paramları kullansanız bile, artık InnoDB tabloları ile oynamaya hazırsınız. varsayılan depolama motoru seçeneğini kullanarak SET storage_engine=INNODB; veya config: Yalnızca InnoDB'nin tablo oluşturmak istiyorsanız

, sen ile geçerli oturum için ya varsayılan depolama motorunu değiştirebilir. Bu arada

, InnoDB için bir tablo dönüştürmek için hızlı yolu yukarıda açıklanan yol değildir. Bir sade bilgilerin girilmesiyle InnoDB için bir tablo dönüştürmek için aşağıdakileri yapabilirsiniz: Elbette

CREATE TABE new AS SELECT * FROM old WHERE 1<>1; 
ALTER TABLE new ENGINE = INNODB; 
INSERT INTO new SELECT * FROM old; 

elle ihtiyaç dizin eklemek zorunda, ama onun genellikle değer süresi (ve ağrı) Eğer kıyasla tasarruf biraz daha büyük tablolarda ALTER TABLE ....

+0

Neden daha kullanışlı bir cevap kabul edilmiyor? Benden +1 – fancyPants

İlgili konular