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.
Jawaban:
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:
Referensi:
sumber
Punya masalah yang sama di Ubuntu 15.10.
https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 - membawa solusinya:
(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
jika satu atau kedua file ada, periksa apakah dua baris ini termasuk:
systemctl daemon-reload
... dan semuanya harus baik-baik saja.
sumber
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.conf
Anda perlu meningkatkan open_files_limit internal MySQL. Jadi, tambahkan sementara ini ke konfigurasi dan mulai ulang MySQL.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.
sumber
Terima kasih atas solusinya. Tetapi bagi saya, masalah ini telah dibayangi oleh dua fakta lainnya.
Setelah memperbaiki masalah InnoDB, itu masih meludah
Saya harus memulai mysqld di root console dan me-restart secara manual
Kemudian server mulai menunjukkan database, tetapi tidak dapat mengakses beberapa tabel. Solusi Anda dengan batas yang ditingkatkan memperbaiki sisa masalah, terima kasih!
sumber