Ubuntu: 12.04 LTS (Linux mysql02 3.2.0-40-generic # 64-Ubuntu SMP Mon Mar 25 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU / Linux)
MySQL: dystrybucja Ubuntu 5.5.31
Apparmor: USUNIĘTO!
Serwer działa solidnie od ponad roku. W ten poniedziałek MySQL zaczął zawodzić. Aktualizacja spowodowała problem i nie możemy ustalić, co to jest. Próbowaliśmy nawet przywrócić MySQL 5.5.30, ale bez powodzenia. Wróciliśmy o 5.5.31.
Wpisy w dzienniku błędów 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)
Wygląda na to, że mamy problem z ulimit. Całkowicie usunęliśmy APPARMOR. Zwiększyliśmy plik /etc/security/limits.conf i nadal nie mamy szczęścia:
# Out of desperation....
* soft nofile 49152
* hard nofile 65536
# No effect!?!!?
#mysql soft nofile 49152
#mysql hard nofile 65536
Aby pokazać limit.conf działa:
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
A oto ważne wpisy w my.cnf
[mysqld_safe]
open_files_limit = 16384
[mysqld]
open_files_limit = 16384
Jednak:
root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit | 1024
Jesteśmy kompletnie zakłopotani i przygnębieni. Każda pomoc byłaby bardzo mile widziana.
Odpowiedzi:
System operacyjny: wdrożenia Ubuntu (Debian)
Opcja serwera MySQL: limit otwartych plików
Wygląda na to, że Debian upstart nie używa parametrów zdefiniowanych w /etc/security/limits.conf , więc kiedy uruchamiasz mysql za pomocą komendy service (i tak w przypadku upstart), zastępuje te zdefiniowane limity i używa domyślnej 1024 .
Rozwiązaniem jest zmodyfikowanie mysql.conf plik definiujący usługę dorobkiewicz, że znajduje się w /etc/init/mysql.conf i dodaj następujące wiersze przed tym pre-start bloku:
Bibliografia:
źródło
Miałem ten sam problem na Ubuntu 15.10.
https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 - przyniósł rozwiązanie:
(w moim przypadku), jeśli nie, utwórz /lib/systemd/system/mysql.service i skopiuj zawartość tego pliku https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/ komentarze / 11 i dodaj dwie linie gdzieś w pliku
jeśli istnieje jeden lub oba pliki, sprawdź, czy uwzględniono te dwa wiersze:
systemctl daemon-reload
... i wszystko powinno być w porządku.
źródło
Ponieważ żadna z powyższych czynności nie rozwiązała problemu (prowadzi tylko do braku pamięci w systemie), oto rozwiązanie, które znalazłem:
W
/etc/mysql/my.conf
musisz zwiększyć MySQL wewnętrzne open_files_limit. Tymczasowo dodaj to do konfiguracji i zrestartuj MySQL.sudo /etc/init.d/mysql restart
Po uruchomieniu operacji powodującej błąd zbyt wielu otwartych plików możesz przywrócić konfigurację do wartości domyślnej i ponownie uruchomić MySQL.
źródło
Dziękuję za obejście. Ale dla mnie problem został przyćmiony przez dwa pozostałe fakty.
Po naprawieniu problemu z InnoDB nadal plunął
Musiałem uruchomić mysqld w konsoli root i ręcznie zrestartować
Następnie serwer zaczął wyświetlać bazy danych, ale nie mógł uzyskać dostępu do niektórych tabel. Twoje obejście ze zwiększonymi limitami naprawiło resztę problemów, dziękuję!
źródło