Sunucuyu güncelledikten sonra MySQL dosyaları açamıyor: errno: 24


16

Ubuntu: 12.04 LTS (Linux mysql02 3.2.0-40-jenerik # 64-Ubuntu SMP Pzt 25 Mar 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU / Linux)

MySQL: Ubuntu dağıtımı 5.5.31

Apparmor: KALDIRILDI!

Sunucu bir yılı aşkın süredir kaya gibi sağlam çalışıyor. Sonra bu Pazartesi MySQL başarısız oldu. Bir güncelleme soruna neden oldu ve bunun ne olduğunu bulamıyoruz. Hatta MySQL 5.5.30'a geri dönmeye çalıştık, ama hiç şansımız yok. Biz 5.5.31 döndü.

MySQL hata günlüğü girişleri:

130430  7:55:46 [ERROR] Error in accept: Too many open files
130430  7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fclvod.frm' (errno: 24)
130430  7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fcnote.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcont.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcontv.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffnote.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/frcfcl.frm' (errno: 24)

Görünüşe göre ulimit sorunuyla karşı karşıyayız. APPARMOR uygulamasını tamamen kaldırdık. /Etc/security/limits.conf dosyasını artırdık ve hala şansımız yok:

# Out of desperation....
* soft  nofile  49152
* hard  nofile  65536

# No effect!?!!?
#mysql  soft  nofile  49152
#mysql  hard  nofile  65536

Ve sınırları göstermek için. Conf çalışıyor:

root@mysql02:/etc/security# ulimit -Sa | grep "open files"
open files                      (-n) 49152

root@mysql02:/etc/security# ulimit -Ha | grep "open files"
open files                      (-n) 65536

Ve işte my.cnf içindeki önemli kayıtlar

[mysqld_safe]
open_files_limit = 16384

[mysqld]
open_files_limit = 16384

Ancak:

root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit                                  | 1024

Biz tamamen güdük ve aşağı. Herhangi bir yardım büyük mutluluk duyacağız.


1
Çok Fazla Açık Dosya ile ilgili ÖNCE günlüklerde hangi hata mesajları var? Open_files_limit değiştirildiğinden beri mysqld'i yeniden başlattınız, değil mi?
Bert

evet, her değişiklik yaptığımızda MySQL'i yeniden başlattık. Eksik olarak bildirilen bir tablonuz var (ve bir nedenden dolayı): 30430 8:36:39 InnoDB: Hata: bir tablo açmaya çalışıyor, ancak InnoDB: tablo alanı dosyasını açamadı './oti_lw_prod/apinvoice_charges .ibd '!
Van

Bilginize, kullanıcılarımızı diğer usta (düello yöneticisi kurulumu) sunucusuna (01) taşıdık ve şimdi aynı belirtileri gösteriyor. Bu (01) bu başarısız sunucu (02) ile tam olarak aynı konfigürasyona sahipti ve bu (02) ölürse usta üzerinden bizim başarısızlığımızdır. Bu plan için çok fazla. Bunun bir işletim sistemi sorunu olduğundan eminiz.
Van

Eminim bu Orijinal Poster için işe yaramadı, ama benim için bu bir güvenlik güncellemesinden sonra oldu ve mysql'i yeniden başlatmak yeterliydi.
Kzqai

Yanıtlar:


19

İşletim Sistemi: Ubuntu (Debian) dağıtımları

MySQL Sunucu Seçeneği: open-files-limit

Debian uptart , /etc/security/limits.conf içinde tanımlanan parametreleri kullanmıyor gibi görünüyor , bu nedenle mysql'yi service komutuyla (ve böylece, uptart altında) başlattığınızda , bu tanımlanan sınırları geçersiz kılar ve varsayılan 1024'ü kullanır .

Solüsyon değiştirmektir mysql.conf It is located in, sonradan görme hizmetini tanımlayan dosyayı /etc/init/mysql.conf ve aşağıdaki satırları ekleyin önce başlangıç öncesi bloğu:

# NB: Upstart scripts do not respect
# /etc/security/limits.conf, so the open-file limits
# settings need to be applied here.
limit nofile 32000 32000
limit nproc 32000 32000

Referanslar:


Hayal kırıklığı bir yerde açıkça belgelenmemiştir. :( David'in sunucu hatası konusundaki görevine yeni geldik.
Van

Ve bu bir hata değil, buna göre: bugs.launchpad.net/mysql-server/+bug/938669
Van

Bu, açık dosyalarda bir artışa neden olabilecek tablolara bölümler eklendikten sonra aniden ve endişe verici bir şekilde ortaya çıkabilir.
markdwhite

Bu benim için Ubuntu 15.10'da işe yaradı. Paketleri yükselttikten sonra, tüm sitelerimi bozan tonlarca 'Dosya açılamıyor' hata mesajı aldı: (... Bana çok fazla baş ağrısı ve zaman kazandığınız için bir milyon teşekkürler.
Emmanuel

Herkes "başlangıç ​​öncesi" blokun ne olduğunu açıklayabilir mi? Ben Ubuntu 16 çalıştırıyorum ve bu sorunu yaşıyorum ama yapılandırma dosyası eskisinden daha farklı görünüyor
billynoah

4

Aynı sorun Ubuntu 15.10'da da vardı.

https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 - çözümü getirdi:

  1. /lib/systemd/system/mysql.service veya /lib/systemd/system/mysqld.service olup olmadığını kontrol edin
  2. (benim durumumda) değilse, /lib/systemd/system/mysql.service oluşturun ve içeriğini bu dosyaya kopyalayın https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/ yorumlar / 11 ve iki satırı dosyada bir yere ekleyin

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  3. bir veya iki dosya varsa, bu iki satırın dahil edilip edilmediğini kontrol edin:

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  4. gerçekleştirmek systemctl daemon-reload

... ve her şey yolunda olmalı.


1

Yukarıdakilerin hiçbiri benim için sorunu çözmediği için (sadece sistemin belleği tükenmesine neden oluyor), işte bulduğum çözüm:

İçinde /etc/mysql/my.confMySQL'leri artırmanız gerekir dahili open_files_limit. Bu yüzden geçici olarak yapılandırmaya ekleyin ve MySQL'i yeniden başlatın.

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

Size çok fazla açık dosya hatası veren işlemi çalıştırdıktan sonra , yapılandırmanızı varsayılan değerine geri döndürebilir ve MySQL'i yeniden başlatabilirsiniz.


Bu benim için Ubuntu 16.04 üzerinde çalıştı, teşekkürler :)
Richard Frank

0

Geçici çözüm için teşekkür ederiz. Ama benim için sorun diğer iki gerçek tarafından gölgede bırakıldı.

  1. Veri dizinim varsayılan kurulumdan farklı. Birden fazla nedenden dolayı, hem tarihi hem de teknik.
  2. Çok eski bir kurulumdan yükseltme yapıyordum, bu da birkaç geri ve ileri bağlantı noktasından geçti. Yeni yüklenen bir MySQL 5.5'in ilk başlangıcında, InnoDB motoru etkinleştirilmedi (dahili uygulama yapılandırma dosyasında devre dışı bırakıldı, ancak önceki sürümlerde bulunan eklenti 5.5'te mevcut değildi) ve yükseltme işareti gerçekten yükseltilmeden oluşturuldu herhangi bir tablo.

InnoDB sorununu çözdükten sonra hala tükürüyordu

mysql> SHOW DATABASES;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 24)

Kök konsolunda mysqld başlatmak ve manuel olarak yeniden başlatmak zorunda kaldı

/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --force

Sonra sunucu veritabanlarını göstermeye başladı, ancak bazı tablolara erişemedi. Artan sınırlarla ilgili geçici çözüm, sorunların geri kalanını düzeltti, teşekkür ederim!

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.