İnnodb_file_per_table ile gitmelisiniz ve InnoDB'nin mevcut altyapısıyla ne kadar temizlik yapmalısınız.
Birçok DB barındırma istemcileri MySQL kurulumu gördüm ve InnoDB varsayılan durumunda bırakın. Bu, sistem tablo alanının (daha iyi ibdata1 olarak bilinir) çılgınca büyümesine neden olur.
İnnodb_file_per_table dosyasına geçseniz bile, .ibd dosyasının ibdata1'den ayıklanması gerekir ve ibdata hiçbir zaman küçülmez. Örneğin, ibdata1 içinde 2GB alan mydb.mytable adlı bir tablonuz varsa, ayıklamak için aşağıdakilere ihtiyacınız vardır:
ADIM 01) /etc/my.cnf dosyasına ekleyin
[mysqld]
innodb_file_per_table
ADIM 02) service mysql restart
ADIM 03) ALTER TABLE mydb.mytable ENGINE=InnoDB;
/Var/lib/mysql/mydb/mytable.ibd dosyası
Ne yazık ki, değişiklikten önce tablo tarafından işgal edilen 2GB alan geri alınamaz. InnoDB'nin altyapısını nasıl ve niçin temizleyeceğimize dair geçmiş yazıları yazdım:
Bu büyük değişikliği yaptıktan sonra innodb_open_files değerini artırmayı unutmayın (varsayılan 300) . Aksi takdirde, disk erişimi çok sınırlıdır.
Birleşimlerle ilgili olarak, birleştirme ölçütlerini destekleyen uygun dizinlere sahip olduğunuzdan emin olun.
GÜNCELLEME 2012-04-02 11:30 EDT
Yeni bir kurulumda innodb_file_per_table kullanmak ibdata1'in çok yavaş büyümesine neden olur, çünkü tüm DDL'ler ibdata dışında yapılır. Daha önce de belirttiğim gibi herhangi bir InnoDB tablosunu küçültebilirsiniz:
ALTER TABLE mydb.mytable ENGINE=InnoDB;
GÜNCELLEME 2012-04-02 16:50 EDT
Yedeklemeler söz konusu olduğunda, .ibd dosyalarının kopyalarını oluşturmaya son derece dikkat edin. Neden?
Her .ibd dosyasının içinde tablespace_id olarak bilinen özel bir değer vardır. İbdata1 içinde tablespace_id değerlerinin bir listesi vardır. Tabloyu bırakmayı ve yeniden oluşturmayı gerektiren tablo bakımı gerçekleştirirseniz, tablespace_id öğesi farklı olur. Böyle bir .ibd dosyasının kopyasını oluşturmak, yalnızca ibdata1'in bir kopyasını da yaparsanız kullanım için veritabanına geri döndürülebilir. Bu, diğer tüm InnoDB tablolarının tablespace_id değerini tehlikeye sokar. Bunun ışığında, mysqldump yedeklemelerini gerçekleştirmeniz tercih edilir, çünkü mysqldumps verilerin mantıksal kopyalarıdır. Başka bir deyişle, yedekleme ibdata1'in zaman noktasından bağımsızdır ve çalışabilirlik sorunları olmadan yeniden yükleme yapmakta serbestsiniz.