
Ubuntu:12.04 LTS (Linux mysql02 3.2.0-40-generic #64-Ubuntu SMP Montag, 25. März 2013, 21:22:10 UTC x86_64 x86_64 x86_64 GNU/Linux)
MySQL:Ubuntu-Distribution 5.5.31
Rüstung:ENTFERNT!
Der Server lief über ein Jahr lang einwandfrei. Dann begann MySQL diesen Montag zu versagen. Ein Update hat das Problem verursacht und wir können nicht herausfinden, woran es liegt. Wir haben sogar versucht, auf MySQL 5.5.30 zurückzusetzen, aber ohne Erfolg. Wir sind auf 5.5.31 zurückgekehrt.
MySQL-Fehlerprotokolleinträge:
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)
Es scheint, dass wir auf ein Ulimit-Problem stoßen. Wir haben APPARMOR vollständig entfernt. Wir haben die/etc/security/limits.confund immer noch kein Glück:
# Out of desperation....
* soft nofile 49152
* hard nofile 65536
# No effect!?!!?
#mysql soft nofile 49152
#mysql hard nofile 65536
Und um zu zeigen,Grenzen.conffunktioniert:
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
Und hier sind die wichtigen Einträge inmeine.cnf
[mysqld_safe]
open_files_limit = 16384
[mysqld]
open_files_limit = 16384
Jedoch:
root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit | 1024
Wir sind völlig ratlos und niedergeschlagen. Wir sind für jede Hilfe sehr dankbar.
Antwort1
Betriebssystem:Ubuntu (Debian)-Bereitstellungen
MySQL-Serveroption:Limit für geöffnete Dateien
Es scheint, dass das DebianEmporkömmlingverwendet nicht die Parameter, die in/etc/security/limits.conf, wenn Sie also mysql über dasService(und auch unter Upstart) überschreibt es diese definierten Grenzwerte und verwendet den Standardwert 1024.
Die Lösung besteht in der Änderung dermysql.confDatei, die den Upstart-Dienst definiert, befindet sich in/etc/init/mysql.confund fügen Sie die folgenden Zeilen hinzuVorDieVorstartBlock:
# 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
Verweise:
Antwort2
Hatte das gleiche Problem unter Ubuntu 15.10.
https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758- brachte die Lösung:
- Überprüfen Sie, ob /lib/systemd/system/mysql.service oder /lib/systemd/system/mysqld.service vorhanden ist
(in meinem Fall) wenn nicht, erstellen Sie /lib/systemd/system/mysql.service und kopieren Sie den Inhalt in diese Dateihttps://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/comments/11und fügen Sie die beiden Zeilen irgendwo in der Datei hinzu
LimitNOFILE=infinity LimitMEMLOCK=infinity
Wenn eine oder beide Dateien vorhanden sind, prüfen Sie, ob diese beiden Zeilen enthalten sind:
LimitNOFILE=infinity LimitMEMLOCK=infinity
- ausführen
systemctl daemon-reload
... und alles sollte gut sein.
Antwort3
Da keine der oben genannten Maßnahmen das Problem für mich behoben hat (es führte lediglich dazu, dass dem System der Arbeitsspeicher ausging), hier die Lösung, die ich gefunden habe:
Sie /etc/mysql/my.conf
müssen MySQLs internes Open_Files_Limit erhöhen. Fügen Sie dies also vorübergehend zur Konfiguration hinzu und starten Sie MySQL neu.
[mysqld]
open_files_limit = 100000
sudo /etc/init.d/mysql restart
Nach dem Ausführen der Operation erhalten Sie dieZu viele offene DateienFehler, können Sie Ihre Konfiguration auf die Standardeinstellungen zurücksetzen und MySQL erneut starten.
Antwort4
Vielen Dank für den Workaround. Aber für mich wurde das Problem durch die beiden anderen Fakten überschattet.
- Mein Datenverzeichnis unterscheidet sich von der Standardinstallation. Aus mehreren Gründen, sowohl historischen als auch technischen.
- Ich habe ein Upgrade von einer sehr alten Installation durchgeführt, die eine Reihe von Back- und Forward-Ports durchlaufen hat. Beim ersten Start einer neu installierten MySQL 5.5 war die InnoDB-Engine nicht aktiviert (die interne Implementierung war in der Konfigurationsdatei deaktiviert, aber das in früheren Versionen verfügbare Plugin ist in 5.5 nicht vorhanden) und die Upgrade-Markierung wurde erstellt, ohne dass tatsächlich irgendwelche Tabellen aktualisiert wurden.
Nach der Behebung des InnoDB-Problems spuckte es immer noch
mysql> SHOW DATABASES;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 24)
Ich musste mysqld in der Root-Konsole starten und manuell neu starten
/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --force
Dann begann der Server, Datenbanken anzuzeigen, konnte aber auf einige Tabellen nicht zugreifen. Ihr Workaround mit erhöhten Limits hat die restlichen Probleme behoben, danke!