MySQL tidak dapat membuka file setelah memperbarui server: errno: 24

16

Ubuntu: 12,04 LTS (Linux mysql02 3.2.0-40-generic # 64-Ubuntu SMP Mon 25 Mar 22:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU / Linux)

MySQL: Ubuntu distro 5.5.31

Apparmor: DIHAPUS!

Server telah berjalan sangat baik selama lebih dari setahun. Kemudian Senin ini MySQL mulai gagal. Pembaruan telah menyebabkan masalah dan kami tidak dapat mengetahuinya apa. Kami bahkan mencoba memutar kembali ke MySQL 5.5.30 tetapi tidak berhasil. Kami kembali pada 5.5.31.

Entri log kesalahan MySQL:

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)

Tampaknya kita mengalami masalah ulimit. Kami telah menghapus sepenuhnya APPARMOR. Kami telah meningkatkan /etc/security/limits.conf dan masih belum berhasil:

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

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

Dan untuk menunjukkan limit.conf berfungsi:

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

Dan di sini ada entri penting di my.cnf

[mysqld_safe]
open_files_limit = 16384

[mysqld]
open_files_limit = 16384

Namun:

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

Kami benar-benar bingung dan jatuh. Setiap bantuan akan sangat dihargai.

mobil van
sumber
1
Pesan kesalahan apa yang ada di log SEBELUM pesan tentang Terlalu Banyak Buka File? Anda telah memulai ulang mysqld sejak mengubah open_files_limit, bukan?
Bert
ya, kami telah me-restart MySQL setiap kali kami melakukan perubahan. Kami memiliki satu tabel yang dilaporkan hilang (dan karena alasan tertentu): 30430 8:36:39 InnoDB: Kesalahan: mencoba membuka tabel, tetapi tidak bisa InnoDB: buka file tablespace './oti_lw_prod/apinvoice_charges .ibd '!
Van
FYI, kami memindahkan pengguna kami ke master kami yang lain (setup duel master) sever (01) dan sekarang menunjukkan gejala yang sama persis. Itu (01) memiliki konfigurasi yang sama persis dengan server yang gagal ini (02) dan merupakan kegagalan kita atas master jika yang ini (02) mati. Ya, banyak untuk rencana itu. Kami cukup yakin ini adalah masalah OS.
Van
Saya yakin ini tidak berfungsi untuk Poster Asli, tetapi bagi saya ini terjadi setelah pembaruan keamanan, dan memulai kembali mysql sudah cukup.
Kzqai

Jawaban:

19

OS: penyebaran Ubuntu (Debian)

Opsi Server MySQL: buka-file-batas

Tampaknya pemula baru Debian tidak menggunakan parameter yang ditentukan dalam /etc/security/limits.conf , jadi ketika Anda meluncurkan mysql melalui perintah layanan (dan, di bawah pemula), ia menimpa batas yang ditentukan dan menggunakan standar 1024 .

Solusinya adalah dengan memodifikasi mysql.conf file yang mendefinisikan layanan kaya baru, terletak di /etc/init/mysql.conf dan tambahkan baris berikut sebelum yang pre-start blok:

# 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

Referensi:

mobil van
sumber
Mengecewakan ini tidak didokumentasikan dengan jelas di suatu tempat. :( Kami baru saja terjadi pada posting David di serverfault.
Van
Dan ini bukan bug, menurut ini: bugs.launchpad.net/mysql-server/+bug/938669
Van
Ini bisa menjadi tiba-tiba, dan mengejutkan, terlihat setelah menambahkan partisi ke tabel yang dapat menyebabkan peningkatan pada file yang terbuka.
markdwhite
Ini bekerja untuk saya di Ubuntu 15.10. Setelah memutakhirkan paket, ada banyak pesan kesalahan 'Tidak dapat membuka file', yang menghancurkan semua situs saya: (... Terima kasih banyak telah menyelamatkan saya dari sakit kepala dan waktu.
Emmanuel
adakah yang bisa menjelaskan apa itu blok "pra-mulai"? Saya menjalankan Ubuntu 16 dan mengalami masalah ini tetapi file konfigurasi terlihat berbeda dari sebelumnya
billynoah
4

Punya masalah yang sama di Ubuntu 15.10.

https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 - membawa solusinya:

  1. periksa apakah /lib/systemd/system/mysql.service atau /lib/systemd/system/mysqld.service sudah ada
  2. (dalam kasus saya) jika tidak, buat /lib/systemd/system/mysql.service dan salin konten ke file ini https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/ komentar / 11 dan tambahkan dua baris di suatu tempat di file

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  3. jika satu atau kedua file ada, periksa apakah dua baris ini termasuk:

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  4. menjalankan systemctl daemon-reload

... dan semuanya harus baik-baik saja.

Hendrik Eggers
sumber
1

Karena tidak ada satu pun di atas yang memperbaiki masalah bagi saya (hanya menyebabkan sistem kehabisan memori), inilah solusi yang saya temukan:

Dalam /etc/mysql/my.confAnda perlu meningkatkan open_files_limit internal MySQL. Jadi, tambahkan sementara ini ke konfigurasi dan mulai ulang MySQL.

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

Setelah menjalankan operasi yang memberi Anda terlalu banyak kesalahan file terbuka , Anda dapat mengubah konfigurasi kembali ke default dan me-restart MySQL lagi.

mniess
sumber
ini bekerja untuk saya di Ubuntu 16.04, terima kasih :)
Richard Frank
0

Terima kasih atas solusinya. Tetapi bagi saya, masalah ini telah dibayangi oleh dua fakta lainnya.

  1. Direktori data saya berbeda dari instalasi default. Karena berbagai alasan, baik historis maupun teknis.
  2. Saya memutakhirkan dari instalasi yang sangat lama, yang melewati sejumlah port back dan forward. Pada awal pertama dari MySQL 5.5 yang baru diinstal, mesin InnoDB tidak diaktifkan (implementasi internal dinonaktifkan dalam file konfigurasi, tetapi plugin yang tersedia di versi sebelumnya tidak ada di 5.5), dan tanda upgrade dibuat tanpa benar-benar meningkatkan tabel apa saja.

Setelah memperbaiki masalah InnoDB, itu masih meludah

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

Saya harus memulai mysqld di root console dan me-restart secara manual

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

Kemudian server mulai menunjukkan database, tetapi tidak dapat mengakses beberapa tabel. Solusi Anda dengan batas yang ditingkatkan memperbaiki sisa masalah, terima kasih!

AnrDaemon
sumber