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)