Bunun için tam bir cevabım var.
Bir kez innodb_file_per_table yerine konur ve yeni InnoDB tablolar kullanılarak küçüldü edilebilir ALTER TABLE <innodb-table-name> ENGINE=InnoDB';
yeni küçülecek Bu .ibd
GARANTİLİ dosyaları.
ALTER TABLE <innodb-table-name> ENGINE=InnoDB';
İnnodb_file_per_table'ı kullanmadan önce oluşturulan bir InnoDB tablosunda çalıştırıyorsanız , bu tablo için veri ve dizinleri ibdata1 dosyasından çıkaracak ve bir .ibd
dosyada saklayacaktır, .
ibdata1
Dosya normalde bilgi dört tip evler
İşte ibdata1 dosyasını hemen hemen küçültmenin garantili yolu ...
ADIM 01) MySQLBütün veritabanlarını bir SQL metin dosyasına atın (SQLData.sql olarak adlandırın)
ADIM 02) Tüm veritabanlarını bırak (mysql, information_schema ve performance_schema şemaları hariç)
ADIM 03) MySQL Kapatma
ADIM 04) Aşağıdaki satırları /etc/my.cnf dosyasına ekleyin.
[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G
innodb_data_file_path=ibdata1:10M:autoextend
Sidenote: innodb_buffer_pool_size için kümeniz ne olursa olsun, innodb_log_file_size öğesinin innodb_buffer_pool_size% 25 olduğundan emin olun.
- ADIM 05) ibdata1, ib_logfile0 ve ib_logfile1'i silin ( silmeden önce aşağıdaki güncellemeye bakın! )
Bu noktada, yalnızca / var / lib / mysql içindeki mysql şeması olmalıdır.
- ADIM 06) MySQL'i yeniden başlat
Bu, ibdata1'i 10 MB'de (seçeneği yapılandırmayın), ib_logfile0 ve ib_logfile1'i her biri 1G'de yeniden oluşturur
- ADIM 07) SQLData.sql dosyasını mysql içine tekrar yükleyin
ibdata1
büyüyecek ancak yalnızca tablo meta verilerini ve aralıklı MVCC verilerini içerecektir.
Her InnoDB tablosu dışında olacak ibdata1
Mydb.mytable adlı bir InnoDB tablonuz olduğunu varsayalım. Eğer girerseniz /var/lib/mysql/mydb
, tabloyu temsil eden iki dosya göreceksiniz.
mytable.frm
(Depolama Motoru Başlığı)
mytable.ibd
(Tablo Verileri Ana Sayfası ve Tablo Dizinleri mydb.mytable
)
ibdata1
artık asla InnoDB verilerini ve Dizinlerini içermeyecek.
İle innodb_file_per_table seçenek in /etc/my.cnf
, Çalıştırabileceğiniz OPTIMIZE TABLE mydb.mytable
YA ALTER TABLE mydb.mytable ENGINE=InnoDB;
ve dosya /var/lib/mysql/mydb/mytable.ibd
aslında küçülecek.
Bunu kariyerimde MySQL DBA olarak sayısız kez tek bir problem olmadan yaptım. Aslında, bunu ilk yaptığımda, 50 MB ibdata1 dosyasını 50 MB'a daralttım.
Bir şans ver. Bununla ilgili başka sorularınız varsa, bana e-posta gönder. Güven Bana. Bu kısa vadede ve uzun vadede işe yarayacak.
GÜNCELLEME 2013-07-02 15:08 EDT
Bu konuda sahip olduğum bir uyarı var, diğer yazılarımda da güncelledik ama bunu kaçırdım: Yanıtımı innodb_fast_shutdown ile biraz daha güncelliyorum çünkü mysql'i yeniden başlatıp bunu yapmak için mysql'i durdurdum. Şimdi, bu bir adım hayati öneme sahiptir çünkü kabul edilmeyen her işlem InnoDB İşlem Günlükleri içinde ve dışında başka hareketli parçalara sahip olabilir ( Bkz. InnoDB Altyapısı). ).
Lütfen, innodb_fast_shutdown öğesinin 2 olarak ayarlanmasının , günlükleri de temizleyeceğini, ancak daha fazla hareketli parçanın hala bulunduğunu ve MySQL'in başlangıcında Crash Recovery'de toplandığını unutmayın. 0 ayarı en iyisidir.