# MySQL/MariaDB-Fehler „Too many connections“ 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](https://www.ionos.de/digitalguide/hosting/hosting-technik/datenbanken/) kann nur eine beschränkte Anzahl an Anfragen gleichzeitig verarbeiten. Wird dieser **Maximalwert überschritten**, zeigen [MySQL](https://www.ionos.de/digitalguide/server/knowhow/was-ist-mysql/) oder [MariaDB](https://www.ionos.de/digitalguide/server/knowhow/was-ist-mariadb/) Ihnen die Fehlermeldung „Too many connections” an. Dies ist beispielsweise der Fall, wenn ein [PHP](https://www.ionos.de/digitalguide/websites/webseiten-erstellen/php-lernen-leicht-gemacht-das-grosse-einsteiger-tutorial/)-Skript zu viele gleichzeitige Verbindungen zu der [relationalen Datenbank](https://www.ionos.de/digitalguide/hosting/hosting-technik/relationale-datenbanken/) 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.

## „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](https://www.ionos.de/digitalguide/server/knowhow/was-ist-ein-arbeitsspeicher/) (RAM)
- Wie viel RAM jede Verbindung benötigt (einfache Abfragen benötigen weniger RAM als arbeitsintensivere Verbindungen)
- Die akzeptable Reaktionszeit

Laut der [MySQL-Dokumentation](https://dev.mysql.com/doc/refman/8.0/en/too-many-connections.html "Dokumentation von MySQL") 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:

```none
sudo nano /etc/my.cnf
```

Direkt unter der ersten Zeile sehen Sie folgenden Eintrag:

```none
[mysqld]
```

Fügen Sie einen neuen Eintrag hinzu:

```none
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:

```none
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:

```none
[mysqld]
```

Fügen Sie folgende Zeilen ein:

```none
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.

```none
SET GLOBAL wait_timeout=120;
SET GLOBAL interactive_timeout=120;
```


This is a markdown version of: [https://www.ionos.de/digitalguide/websites/web-entwicklung/mysqlmariadb-zu-viele-verbindungen-beheben/](https://www.ionos.de/digitalguide/websites/web-entwicklung/mysqlmariadb-zu-viele-verbindungen-beheben/) for AI/LLM consumption.