[HowTo] Debian (Wheezy/Squeeze) uLimit, MySQL open_files_limit größer als 1024 festlegen!

Gestern wurde ich vor eine kleine technische Herausforderung gesetzt: Eine Migration von Debian Squeeze nach Debian Wheezy hat ein wenig für Aufregung gesorgt. Der MySQL Server (5.6.25, von dotdeb.org) hat nicht wie erwartet funktioniert und hat den Fehler Error 1016 (HY000) ausgespuckt.

ERROR 1016 (HY000) at line 1: Can't open file: './mysql/ndb_binlog_index.frm' (errno: 24 - Too many open files)
ERROR 1016 (HY000) at line 1: Can't open file: './mysql/plugin.frm' (errno: 24 - Too many open files)
ERROR 1016 (HY000) at line 1: Can't open file: './mysql/procs_priv.frm' (errno: 24 - Too many open files)
ERROR 1016 (HY000) at line 1: Can't open file: './mysql/proxies_priv.frm' (errno: 24 - Too many open files)
ERROR 1016 (HY000) at line 1: Can't open file: './mysql/servers.frm' (errno: 24 - Too many open files)

Also habe ich recherchiert!

Erst einmal habe ich überprüft, wie viele Dateien gleichzeitig der MySQL-Server öffnen kann. Dazu hab ich mich am MySQL-Server angemeldet und folgenden Befehl eingegeben:

mysql> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1024  |
+------------------+-------+
1 row in set (0.00 sec)

Also habe ich erst einmal den Wert open_files_limit in der Konfiguration für den MySQL Server erhöht, nur um anschliessend festzustellen, dass diese Konfiguration gar nicht berücksichtigt wird.

Meine nächste Idee war, dass sich der MySQL Server vielleicht an den System-Begrenzungen orientiert. Um Soft und Hardlimits zu erhöhen setzt man an der Limits-Datei die entsprechenden Werte:

Datei /etc/security/limits.conf:
 * hard nofile 65535
 * soft nofile 65535

Nach dem ich die oberen Veränderungen vorgenommen hatte, stellte ich fest, dass sich die uLimits immer noch nicht haben erhöhen lassen. So habe ich weiter gesucht und bin auf einen Beitrag gestoßen, in dem in einem Nebensatz erwähnt wird, dass es anscheinend ein Bug in Debian ist und deshalb noch eine weitere Konfiguration notwendig ist.  Und zwar ist in der nachfolgenden Datei diese eine Zeile hinzu zufügen:

Datei /etc/pam.d/common-session:
session required pam_limits.so

Jetzt noch einmal den Server durchstarten und die Limits funktionieren. Auch der MySQL Server öffnet nun anstandslos alle Tabellen und die Überprüfung des relevanten open_files_limit Wertes liefert das gewünschte Ergebnis:

mysql> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 65535 |
+------------------+-------+
1 row in set (0.00 sec)

Ich hoffe, dass mein Beitrag für den ein oder anderen von euch hilfreich ist!

Euer Luke