MySQL MariaDB too many open files beheben

Nach einem Upgrade, Server Neustart oder einfach mit mehr Auslastung auf dem Server, kann es sein das MySQL oder auch MariaDB mit den Standardeinstellungen an die Grenzen kommt.

Im Log oder auch auf dem Webseiten, wird euch dann folgende Fehlermeldung angezeigt. Der Server hat zwar genug Leistung jedoch können keine weiteren Dateien geöffnet werden.

 Too many open files

Schauen wir uns doch kurz den Datenbank-Server an was der bis jetzt eingestellt hat.

Kontrolle

Auf dem Server anmelden

root@testvm: mysql -p -u root
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 786
Server version: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Eingestellten Wert überprüfen

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

Wie wir hier sehen, können im Moment nur 1024 Files geöffnet werden. Für eine Hosting bzw Umgebung mit mehreren Kunden ist das doch ein bisschen zu wenig.

MySQL verlassen

mysql> exit

Limiten Einstellen

/etc/security/limits.conf öffnen und folgenden Wert eintragen.

vi  /etc/security/limits.conf
mysql hard nofile 65535
mysql soft nofile 65535

/etc/pam.d/common-session folgende Zeile am ende Einfügen einfügen

vi /etc/pam.d/common-session
session required pam_limits.so

File für den Service erstellen

vi /etc/systemd/system/mariadb.service.d/limits.conf
oder
vi /etc/systemd/system/mysqlb.service.d/limits.conf

und mit folgenden Inhalt bestücken

[Service] 
LimitNOFILE=65535
LimitMEMLOCK=65535

Dienste neustarten

systemctl daemon-reload
systemctl restart  mysql.service

Endkontrolle

Am Schluss nochmal schnell schauen ob die entsprechenden Werte übernommen wurden.

mysql -p -u root
mysql>> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 65535 |
+------------------+-------+
1 row in set (0.00 sec)
Die mobile Version verlassen