/ Var / lib / mysql dizinindeki ibdata1 dosyasi nedir?


32

Webmin kontrol panelime giriş yaparken, neredeyse tüm disk alanımın dolu olduğunu fark ettim. Sistemimdeki en büyük on dosyayı / dizini aradım ve ibdata1 adlı bir dosyanın 94GB civarında bir yer kapladığını gördüm. Benim / var / lib / mysql dizininde bulunur.

İbdata1 ne yapar? Çıkarmak güvenli miyim? Benim varsayım, bir tür çöplük olduğu, ama bu sadece vahşi bir tahmin.

Yanıtlar:


38

Dosya ibdata1, InnoDB altyapısı için sistem tablo alanıdır.

InnoDB için hayati bilgiler için birkaç sınıf içerir.

  • Tablo Veri Sayfaları
  • Tablo Dizin Sayfaları
  • Bilgi sözlüğü
  • MVCC Kontrol Verileri
    • Boşluğu Geri Al
    • Geri Alma Segmentleri
  • Çift Yazma Arabelleği (İşletim sisteminin önbelleğe alınmasını önlemek için Arka Planda Yazılan Sayfalar)
  • Arabellek Tak (İkincil Dizinlerdeki Değişiklikler)

İbdata1'in InnoDB Universe'deki (Sağ Taraftaki) yerini lütfen unutmayın.

InnoDB Mimarisi

İnnodb_file_per_table özelliğiniibdata1 etkinleştirerek Veri ve Dizin Sayfalarını ayırabilirsiniz . Bu, yeni oluşturulan herhangi bir InnoDB tablosunun verileri ve dizin sayfalarını harici bir .ibddosyada saklamasını sağlar .

Örnek

  • datadir / var / lib / mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;, oluşturur /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table etkin, Depolanan Veri / Dizin Sayfaları /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table devre dışı, ibdata1 içinde depolanan Veri / Dizin Sayfaları

InnoDB tablosunun nerede depolandığı önemli değildir, InnoDB'nin işlevselliği, tablo meta verilerini aramayı ve ACID uyumluluğunu ve İşlem İzolasyonunu desteklemek için MVCC bilgilerini depolamayı ve almayı gerektirir .

Tablo verilerini ve indeksleri ibdata1'den ayırma konusundaki geçmiş makalelerim

SONRA NE YAPACAĞIZ

İbdata1'in her şeyi saklamasını sağlamaya devam edebilirsiniz, ancak bu LVM anlık görüntülerini gerçek sıkıntıya sokuyor (benim görüşüme göre).

My StackOverflow yayınını kullanmanız ve bu dosyayı kalıcı olarak küçültmeniz gerekir.

Lütfen bu sorguyu çalıştırın:

SELECT 
    ((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;

Bu InnoDB Temizleme'yi uyguladıktan sonra ne kadar boşa harcanabileceğini söyleyecektir.


Giriş için teşekkürler. Disk kotam bu yana tamamen doldu - yazılarınızdaki tavsiyelere uymadan önce boş alana ihtiyacım olacak mı? SO hakkındaki orijinal yayınınızın bir SQL dökümü yapmaktan bahsettiğini, ancak bunun muhtemelen gidecek hiçbir yeri olmayan bir ~ 90GB dosya oluşturacağını unutmayın.
James

mysqldump, dizinlerin değil, yalnızca veri sayfalarının mantıksal gösterimini sunar. Verileri boşaltmak için başka bir disk bağına, belki de uzak bir sunucuya ihtiyacınız olacak.
RolandoMySQLDBA 14:13

9
O benim için 91.25350952148438 döndürür SpaceToReclaim. Bu megabayt cinsinden mi? yüzde? bayt?
Isaac

Bunun çok eski olduğunu biliyorum. Ancak konuyla ilgili buraya gelen herkes için, numaranızı GB 94cinsinden ne olursa olsun, numarayı değiştirmeniz gerekir ve size ibdata1GB cinsinden boyut SpaceToReclaimverir.
anupsabraham


2

Eğer varsayılan olarak MySQL motoru olarak innodb kullanıyorsanız, tüm veritabanlarınızı ibdata1 içine kaydediniz. Ayrıca ib_logfile0 ve ib_logfile1 log dosyaları vardır. Bu dosyaları silmeyin.


Sunucumdaki bu dosyayı sil nedir?
Frank
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.