MySQL kann nach der Serveraktualisierung keine Dateien öffnen: errno: 24

MySQL kann nach der Serveraktualisierung keine Dateien öffnen: errno: 24

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:

  1. Überprüfen Sie, ob /lib/systemd/system/mysql.service oder /lib/systemd/system/mysqld.service vorhanden ist
  2. (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
    
  3. Wenn eine oder beide Dateien vorhanden sind, prüfen Sie, ob diese beiden Zeilen enthalten sind:

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  4. ausführensystemctl 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.confmü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.

  1. Mein Datenverzeichnis unterscheidet sich von der Standardinstallation. Aus mehreren Gründen, sowohl historischen als auch technischen.
  2. 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!

verwandte Informationen