MySQL/MariaDB-Fehler „Zu viele Verbindungen“ beheben
Der MySQL-Fehler „Too many connections“ (oder „Zu viele Verbindungen“) erscheint, wenn die zulässige Höchstzahl gleichzeitiger Verbindungen zum Server überschritten wird. Jeder aktive Client verbraucht eine Verbindung, und sobald das Limit erreicht ist, können keine neuen Verbindungen mehr hergestellt werden. Häufige Ursachen sind viele parallel laufende Abfragen, nicht korrekt geschlossene Verbindungen oder ein zu niedrig eingestellter max_connections
-Wert auf dem Server.
Wie kommt es in MySQL/MariaDB zu dem Fehler „Too many connections“?
Eine Datenbank kann nur eine beschränkte Anzahl an Anfragen gleichzeitig verarbeiten. Wird dieser Maximalwert überschritten, zeigen MySQL oder MariaDB Ihnen die Fehlermeldung „Too many connections” an. Dies ist beispielsweise der Fall, wenn ein PHP-Skript zu viele gleichzeitige Verbindungen zu der relationalen Datenbank aufbauen möchte. Auch, wenn Sie eine Webanwendung haben, die eine MySQL-Datenbank verwendet, ist es möglich, dass bei sehr starker Nachfrage der MySQL-Error „Zu viele Verbindungen“ auftritt.
- Daten zentral speichern, teilen und bearbeiten
- Serverstandort Deutschland (ISO 27001-zertifiziert)
- Höchste Datensicherheit im Einklang mit der DSGVO
„Zu viele Verbindungen”: So beheben Sie den MySQL-/MariaDB-Fehler
Es gibt verschiedene Ansätze, um den Fehler „Too many connections“ in MySQL zu beheben, je nachdem, wo genau das Problem liegt. Nachfolgend werden die gängigsten Lösungswege ausführlich erklärt.
Lösung 1: Eine neue maximale Anzahl von Verbindungen auswählen
Die Systemvariable max_connections
bestimmt die Anzahl der Verbindungen, die MySQL/MariaDB akzeptiert. Der Standardwert ist 151 Verbindungen, was 150 normale Verbindungen plus eine Verbindung aus dem SUPER-Konto ermöglicht. SUPER ist ein MySQL-Privileg, das dem User Adminrechte zuteilt.
Als Erstes muss entschieden werden, welchen neuen Maximalwert Sie für max_connections
einstellen möchten. Es gibt mehrere Überlegungen, die bei der Erhöhung der Anzahl der MySQL/MariaDB-Verbindungen zu berücksichtigen sind. Die maximale Anzahl, die vom System unterstützt werden kann, hängt von folgenden Faktoren ab:
- Die Menge des verfügbaren Arbeitsspeichers (RAM)
- Wie viel RAM jede Verbindung benötigt (einfache Abfragen benötigen weniger RAM als arbeitsintensivere Verbindungen)
- Die akzeptable Reaktionszeit
Laut der MySQL-Dokumentation sollten die meisten Linux-Systeme 500 bis 1.000 Verbindungen problemlos unterstützen können.
Dauerhafte Anpassung von max_connections
Um die Variable max_connections
dauerhaft anzupassen, müssen Sie die my.cnf
- oder die my.ini
-Datei aktualisieren.
Öffnen Sie die Datei /etc/my.cnf zur Bearbeitung mit dem Befehl:
sudo nano /etc/my.cnf
Direkt unter der ersten Zeile sehen Sie folgenden Eintrag:
[mysqld]
Fügen Sie einen neuen Eintrag hinzu:
max_connections=[desired new maximum number]
Temporäre Anpassung von max_connections
Um die Anzahl der maximalen Verbindungen temporär und nur für die laufende Verbindung zu ändern, können Sie in der MySQL-Konsole folgenden Befehl ausführen:
SET GLOBAL max_connections = [desired new maximum number];
Die Anpassung ist so lange gültig, bis der SQL-Server neu gestartet wird.
Lösung 2: Nicht verwendete Verbindungen schließen
Ein weiterer häufiger Grund für den Fehler „Too many connections“ ist, dass Anwendungen Datenbankverbindungen nicht ordnungsgemäß schließen. Jede offene Verbindung belegt einen Slot in MySQL oder MariaDB, und wenn Verbindungen nicht freigegeben werden, kann der Server schnell die maximal erlaubte Anzahl erreichen.
In PHP sollten Sie daher nach der Nutzung einer Verbindung immer mysqli_close($connection)
aufrufen, sobald die Abfragen abgeschlossen sind. In Python sollte das Pendant connection.close()
genutzt werden. Node.js-Anwendungen sollten connection.end()
verwenden.
Ein weiterer bewährter Ansatz ist der Einsatz von sogenannten Connection Pools. Hierbei wird eine festgelegte Anzahl an Datenbankverbindungen zentral verwaltet und wiederverwendet, anstatt bei jeder Anfrage eine neue Verbindung zu öffnen. Das reduziert nicht nur die Belastung des Servers, sondern erhöht auch die Performance, da Verbindungserstellung und -abbau Zeit kostet.
Lösung 3: Timeout für Verbindungen anpassen
Eine weitere effektive Methode, um den Fehler „Too many connections“ zu vermeiden, besteht darin, die maximale Lebensdauer inaktiver Verbindungen zu begrenzen. Standardmäßig hält MySQL/MariaDB inaktive Verbindungen für einen relativ langen Zeitraum offen, selbst wenn sie keine Abfragen mehr ausführen. Jede dieser inaktiven Verbindungen belegt jedoch weiterhin einen Slot.
Die Systemvariablen wait_timeout
und interactive_timeout
bestimmen, wie lange inaktive Verbindungen bestehen bleiben, bevor sie automatisch vom Server beendet werden. wait_timeout
gilt für normale Verbindungen, während interactive_timeout
für Verbindungen von interaktiven Clients, wie der MySQL-Konsole, verwendet wird. Durch das Reduzieren dieser Werte werden „hängende“ Verbindungen schneller freigegeben.
Dauerhafte Anpassung
Die Anpassung kann dauerhaft in der Konfigurationsdatei my.cnf
oder my.ini
erfolgen. Öffnen Sie diese hierzu und suchen Sie folgenden Eintrag:
[mysqld]
Fügen Sie folgende Zeilen ein:
wait_timeout=120
interactive_timeout=120
Damit stellen Sie sicher, dass inaktive Verbindungen nicht unnötig lange Ressourcen blockieren.
Temporäre Anpassung
Diese Anpassung kann auch temporär über die MySQL-Konsole erfolgen. Dann gilt die Veränderung nur für die laufende Verbindung und die Werte werden nach Neustart des SQL-Servers wieder zurückgesetzt.
SET GLOBAL wait_timeout=120;
SET GLOBAL interactive_timeout=120;