Also, Ihre Website ist offline. Ihre App wirft den Fehler „Too many connections“ aus, und Ihr erster Instinkt ist Panik. Keine Sorge. Als Entwickler oder Admin ist dies eines der häufigsten Probleme, mit denen Sie konfrontiert werden. Es ist nicht nur ein MySQL-Problem; es ist ein *Symptom* für ein tieferliegendes Problem, meist im Code Ihrer Anwendung.
Der Fehler ist einfach: Ihre Anwendung hat mehr Verbindungen zur Datenbank geöffnet, als der Server konfiguriert ist zuzulassen. Aber die Lösung ist nicht einfach nur „mehr zulassen“. Gehen wir das Ganze wie ein Profi an, vom Quick-Fix bis zur *echten* Lösung.
Schritt 1: Die Profi-Diagnose (Was passiert hier wirklich?)
Bevor Sie irgendetwas ändern, müssen Sie „Datenbank-Detektiv“ spielen. Sie müssen drei Fragen beantworten: Was ist mein Limit? Wie viele Verbindungen sind aktiv? Und wer nutzt sie?
Melden Sie sich bei Ihrem MySQL-Terminal als Root- oder privilegierter Benutzer an.
1. So überprüfen Sie Ihr maximales Verbindungslimit
Zuerst schauen wir nach, was das Limit Ihres Servers ist. Dies ist in der Variablen `max_connections` gespeichert.
mysql> SHOW VARIABLES LIKE 'max_connections';Sie erhalten ein Ergebnis wie `max_connections | 151`. Der Standardwert ist oft 151. Das ist Ihr „definitives Limit“.
2. So überprüfen Sie Ihre aktuell aktiven Verbindungen
Jetzt schauen wir, wie viele Verbindungen *tatsächlich* aktiv sind. Das ist die wichtigste Zahl.
mysql> SHOW STATUS LIKE 'Threads_connected';Wenn diese Zahl `151` (oder was auch immer Ihr Maximum ist) beträgt, ist Ihr Server voll. Das bestätigt das Problem.
3. So sehen Sie, *wer* verbunden ist
Dies ist die wichtigste Diagnose. Der Befehl `SHOW PROCESSLIST` gibt Ihnen eine Liste jeder einzelnen aktiven Verbindung (oder „Thread“).
mysql> SHOW PROCESSLIST;Überfliegen Sie diese Liste. Sehen Sie ein Muster?
- Der „Anfängerfehler“: Sie sehen 150 Verbindungen, alle vom selben Benutzer (z. B. `ihr_app_user`) vom selben Host, und die meisten befinden sich im Status „Sleep“.
- Die „Profi-Erkenntnis“: Das ist Ihr „entscheidender Beweis“. Ein „Sleep“-Zustand bedeutet, dass die Verbindung offen ist, aber nichts tut. Dies ist ein klassisches Anzeichen für eine **nicht geschlossene Verbindung** oder einen **defekten Verbindungspool** in Ihrer Anwendung (PHP, Node.js, Python usw.). Ihre App öffnet bei jeder Abfrage neue Verbindungen und schließt sie nie.
Schritt 2: Der Quick-Fix gegen die *echte* Lösung
Sie haben zwei Möglichkeiten. Die eine bringt Ihre Website in 30 Sekunden wieder online. Die andere *verhindert*, dass sie jemals wieder ausfällt.
Der Quick-Fix (Die „Anfänger-Methode“)
Die „Panik-Reaktion“ besteht darin, einfach das `max_connections`-Limit zu erhöhen. Ich zeige Ihnen, wie, aber Sie müssen verstehen: **Das ist eine temporäre Notlösung.** Wenn Ihre App Verbindungen „leckt“, wird sie nur das neue, höhere Limit füllen und wieder abstürzen.
Um das Limit *vorübergehend* (bis zum nächsten Neustart) zu erhöhen, führen Sie dies aus:
mysql> SET GLOBAL max_connections = 300;Um diese Änderung *dauerhaft* zu machen, müssen Sie Ihre MySQL-Konfigurationsdatei (my.cnf oder my.ini) bearbeiten. Suchen Sie den Abschnitt [mysqld] und fügen Sie diese Zeile hinzu oder bearbeiten Sie sie:
[mysqld]
max_connections = 300Starten Sie dann Ihren MySQL-Server neu.
Warnung: Setzen Sie diesen Wert nicht einfach auf 1000. Jede Verbindung verbraucht RAM. Diesen Wert auf einem kleinen Server in die Höhe zu treiben, kann den Arbeitsspeicher Ihres Servers erschöpfen und die gesamte Maschine zum Absturz bringen, was *viel* schlimmer ist.
Die *echte* Lösung (Die „Profi-Methode“)
Der Fehler ist ein Symptom. Die *Ursache* liegt in Ihrer Anwendung. In 99 % der Fälle liegt die *echte* Lösung in Ihrem Code oder in den Timeout-Einstellungen Ihres Servers.
| Lösung | Was es bewirkt | Warum Sie es tun sollten |
|---|---|---|
| 1. App-Code korrigieren | Verbindungspooling (Connection Pooling) implementieren. | Das ist die wichtigste Lösung. Ihre App sollte *nicht* für jede Abfrage eine neue Verbindung erstellen. Sie sollte eine bestehende, offene Verbindung aus einem kleinen, geteilten Pool (z. B. 10-20 Verbindungen) „ausleihen“ und sie nach Gebrauch zurückgeben. |
| 2. Timeout-Variablen reduzieren | Ausführen: `SET GLOBAL wait_timeout = 60;` | Der `wait_timeout` gibt an, wie viele Sekunden MySQL auf eine „schlafende“ Verbindung wartet, bevor sie automatisch beendet wird. Der Standardwert ist oft 28800 (8 Stunden!). Das ist Wahnsinn. Eine Einstellung auf 60 oder 120 Sekunden bereinigt automatisch die „Sleep“-Threads, die Ihre fehlerhafte App hinterlässt. |
| 3. Verbindungen manuell beenden | Ausführen: `KILL 1234;` (wobei 1234 die „Id“ aus `SHOW PROCESSLIST` ist) | Dies ist ein „chirurgischer Eingriff“. Wenn Sie einige Abfragen sehen, die „feststecken“ (z. B. „Time“ ist 500+ Sekunden), können Sie sie manuell beenden, um einen Platz freizugeben. Dies ist eine manuelle, temporäre Lösung. |
Ein Hinweis zu anderen Systemen
Obwohl sich dieser Artikel auf MySQL konzentriert, ist das Konzept universell. Der Fehler hat nur einen anderen Namen.
- Im Microsoft SQL Server wird dies durch „Benutzerverbindungen“ (user connections) geregelt. Der Standardwert ist sehr hoch (32.767). Wenn Sie diesen Fehler sehen, haben Sie ein *massives* Leck auf Anwendungsebene. Sie können dies mit `sp_configure ‚user connections’` überprüfen.
- In FileZilla (FTP) ist ein „too many connections“-Fehler eine Einstellung des FTP-Servers, keine Datenbankeinstellung. Sie müssen in Ihren FileZilla *Website-Manager > Übertragungs-Einstellungen* gehen und „Anzahl der gleichzeitigen Verbindungen begrenzen“ auf eine niedrige Zahl wie `5` setzen.
Fazit: Hören Sie auf, das Symptom zu behandeln
Der Fehler „Too many connections“ ist eine Warnleuchte auf Ihrem Armaturenbrett. Sie *können* einfach ein Stück Klebeband darüber kleben (indem Sie `max_connections` erhöhen), aber Sie reparieren nicht den Motor.
Ein Profi-Entwickler behandelt dies als kritischen Anwendungsfehler. Überprüfen Sie Ihre `PROCESSLIST`, finden Sie die „Sleep“-Verbindungen und beheben Sie Ihren Code. Die Reduzierung Ihres wait_timeout ist die beste serverseitige Verteidigung gegen eine „undichte“ App. So beheben Sie den „Too many connections“-Fehler endgültig.
