mysql innodb_buffer_pool_size ve innodb_log_file_size arttıktan sonra başlamayacak


18

Bu çözümü burada takip ediyorum /programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 ve innodb_buffer_pool_sizeiçinde 4G ve daha sonra 1G'yi (ayrıca 1024M) artırmaya çalıştım günlük dosyası boyutuna ek olarak, ancak mysql bu değerlerle başlamaz. 512M'ye geri koyarsam mysql iyi başlıyor.

Bunu Nasıl Çözebilirim? Sunucum 16GB'lık bir sunucu ve Webmin sysinfo'ya göre:

Real memory 15.62 GB total, 3.13 GB used

Bu arada hata günlüğünü de buldum:

120529 10:29:32 pys dosyasından mysqld_safe mysqld /var/run/mysqld/mysqld.pid bitti

120529 10:29:33 mysqld_safe / var / lib / mysql veritabanlarıyla mysqld artalan sürecini başlatma

120529 10:29:33 [Not] 'FEDERATED' eklentisi devre dışı.

120529 10:29:33 InnoDB: InnoDB bellek yığını devre dışı

120529 10:29:33 InnoDB: Muteksler ve rw_ kilitleri GCC atomik yerleşiklerini kullanır

120529 10:29:33 InnoDB: Sıkıştırılmış tablolar zlib 1.2.3 kullanıyor

120529 10:29:33 InnoDB: Linux yerel AIO'yu kullanma

120529 10:29:33 InnoDB: Arabellek havuzunu başlatma, boyut = 1,0G

120529 10:29:33 InnoDB: Tampon havuzunun başlatılması tamamlandı

InnoDB: Hata: günlük dosyası ./ib_logfile0 farklı boyutta 0 134217728 bayt

InnoDB: .cnf dosyasında belirtilenden 0 268435456 bayt!


Bunun için hata günlüklerini paylaşabilir misiniz ...
Abdul Manaf

Teşekkürler, bulmayı başardım. Bunun daha kolay olacağını düşünüyorum. Ben de başlangıçta ben de (şimdi bu bilgi ekledim) tampon havuzundaki artış eşleşmesi için günlük dosya boyutunu artırdı ekledi.
giorgio79

Tamam @ giorgio79 ...
Abdul Manaf

Günlük dosyalarını silmeye çalışın.
dezso

Önce günlük dosyası boyutunu sildiniz mi? önce tüm veritabanlarını düşürdün mü? Lütfen tam olarak ne yaptınız hakkında daha fazla bilgi ekleyin?
ALH

Yanıtlar:


19

@RickJames ve @ drogart'tan verilen iki cevap esasen çarelerdir . (Her biri için +1).

Sunduğunuz hata günlüğünden, son iki satır şunları söylüyor:

InnoDB: Hata: günlük dosyası ./ib_logfile0 farklı boyutta 0 134217728 bayt

InnoDB: .cnf dosyasında belirtilenden 0 268435456 bayt! '

Bu noktada, my.cnfInnoDB İşlem Günlükleri (ib_logfile0,ib_logfile1) sırasıyla 128M (134217728)iken innodb_log_file_size değerini 256M (268435456) olarak açıktı . Sorunuzdaki StackOverflow yanıtımın bağlantısına baktığımızdaaşağıdakileri yapmanız gerekiyordu:

Adım 01) Bunu aşağıdakilere ekleyin my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

Adım 02) Bu komutu işletim sisteminde çalıştırın

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

Olanlara güvenmek için koşun tail -f için hata günlüğüne karşı . Her innodb günlük dosyasının ne zaman oluşturulduğunu bildiren bir mesaj görürsünüz.


Teşekkürler, evet önce silmedim. Sadece mysql'in nasıl davrandığını görmek istedim. Adım 3 gerçekleştirdikten sonra yeniden başlatma çalıştı.
giorgio79

1
Bence günlük dosyalarını silmemeli, onları başka bir yere taşımalı ve bir süre sonra günlük dosyası boyutunu başarıyla değiştirdiğinizde silmelisiniz. Aksi takdirde, koşmadan önce MySQL çökerse başınız derde girer service mysqld stop.
KajMagnus

4

Günlükteki hataya dayanarak, bunu yaptığınızı tahmin ediyorum:

  • MySQL'i kapat
  • innodb günlük dosyası boyutunu değiştirmek için my.cnf dosyasını düzenledi
  • mysql başlatmaya çalıştı (sonra başarısız oldu)

Günlük dosyasının boyutunu değiştirirseniz, eski günlük dosyalarını kaldırmanız gerekir. Mevcut dosyalar yapılandırma dosyasında belirtilen boyutla eşleşmezse Innodb başarıyla başlamaz. Bunları başka bir yere taşırsanız, innodb başlatıldığında doğru boyutta yeni işlem günlüğü dosyaları oluşturur.

Sunucu yeni günlük dosyaları ile çalışana ve her şey yolunda görünene kadar, eski dosyaları silmek yerine başka bir dizine taşımanızı öneririm.


3

Yalnızca InnoDB çalıştırıyorsanız buffer_pool kullanılabilir RAM'in yaklaşık% 70'ine ayarlanmalıdır .

Günlük boyutu çok önemli değil. Optimal (Uptime * innodb_log_file_size / Innodb_os_log_written) kabaca olacak şekilde ayarlamaktır. 3600 (1 saat) olacak şekilde ayarlamaktır.

Günlük boyutunu değiştirmek için,

  1. mysqld'i temiz kapat
  2. my.cnf (my.ini) içindeki değeri sil
  3. günlük dosyalarını sil
  4. retstart - yeni günlük dosyaları yeniden oluşturulur.

Teşekkürler, evet bu da doğru bir cevap. Ama sadece birini kabul edebilirdim. Bunu + 1d.
giorgio79

1

Ayrıca arabellek havuzu boyutu için sağlanan değerde bir sorun olabilir . benim durumumda olduğu gibi ...

Artırıldığında veya azalırken innodb_buffer_pool_size, operasyon parçalar halinde yapılır. Yığın boyutu, innodb_buffer_pool_chunk_sizevarsayılan değeri 128M olan yapılandırma seçeneğiyle tanımlanır . Daha fazla bilgi için, bkz. InnoDB Arabellek Havuzu Chunk Boyutunu Yapılandırma .

Tampon havuzu boyutu her zaman eşit veya katına eşit olmalıdır innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. innodb_buffer_pool_sizeEşit olmayan bir değer veya bu değerin katları için yapılandırırsanız innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, arabellek havuzu boyutu otomatik olarak innodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesbelirtilen arabellek havuzu boyutuna eşit veya bu kattan daha küçük olmayan bir değere ayarlanır .

Örnekte, innodb_buffer_pool_size8G'ye innodb_buffer_pool_instancesayarlanmıştır ve 16'ya ayarlanmıştır innodb_buffer_pool_chunk_size. Varsayılan değer olan 128M'dir.

8G geçerli bir innodb_buffer_pool_sizedeğerdir, çünkü 8G innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, 2G olan bir katıdır .

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.