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.

HiDrive Cloud-Speicher
Ihr sicherer Online-Speicher
  • 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;
War dieser Artikel hilfreich?
Zum Hauptmenü