2012-06-25 10 views
5

Ich bekomme folgenden Fehler, wenn ich versuche, mich bei phpMyAdmin anmelden.Wie zu lösen MySQL max_user_connections Fehler

Benutzer * * hat bereits mehr als ‚max_user_connections‘ aktive Verbindungen

Könnte mir jemand mitteilen, wie diese DB-Verbindungen von MySQL-Server Ende schließen?

Vielen Dank für Ihre Zeit!

+0

Bitte versuchen Sie, ein wenig mehr Kontext zu geben, Sie haben uns nicht einmal gesagt, welche Sprache Sie arbeiten ... – Trufa

+0

Hallo Trufa, Vielen Dank für die Überprüfung, aktualisiert :) –

+0

Ich denke immer noch die Frage könnte Haben Sie ein wenig mehr Details, haben Sie versucht, Ihr Problem zu googlen? http://goo.gl/xW9Oe gibt es viele interessante Antworten, vielleicht kann man helfen. – Trufa

Antwort

1

Erstens ist dies ein Hack, aber funktioniert, vor allem auf einem gemeinsamen Host.
Wir haben alle manchmal schlechte "Nachbarn", richtig?

Wenn Sie Zugriff auf Ihre/etc/haben, erhöhen Sie das Limit von 30 auf 50, in Ihrer my.cnf oder durch das Informationsschema.

  1. Um die Fehlermeldung zu ignorieren, die der Besucher sehen könnte, verwenden Sie @mysql_connect(). Wenn mehr als 30 MUCs vorhanden sind, verwenden Sie die Anweisung "or die()", um die Abfrage zu stoppen.
  2. Ersetzen Sie die "oder sterben" Nachricht mit die(header(location: THIS PAGE)) und sicher sein, mysql_close();

Ja, es wird eine Verzögerung beim Laden der Seite verursachen. Aber besser, als ein weißer Bildschirm des Todes zu laden - oder schlimmere Fehlermeldungen, die die Besucher nicht verstehen.

+2

OP fragt nicht nach PHP-Lösung, ich bekomme das gleiche Problem in einem C# -Kontext. – Apolo

1

Ihre beste Wette ist es, max_connections zu erhöhen. Für eine MySQL-Instanz, die mehrere verschiedene Web-Apps bedient (rohe PHP, WordPress, phpBB), möchten Sie wahrscheinlich einen Wert von mindestens 60 dafür haben.

Geben Sie diesen Befehl, und Sie werden herausfinden, wie viele globale Verbindungen, die Sie zur Verfügung haben:

show global variables like '%connections%' 

Sie können zu einem bestimmten Zeitpunkt, wie dies herauszufinden, wie viele Verbindungen verwendet werden:

show status like '%connected%' 

können Sie herausfinden, was jede Verbindung wie dies tut:

show full processlist 

würde ich versuchen Sie für einen globalen Wert von mindestens 100 Verbindungen, wenn ich du wäre. Ihr Dienstanbieter sollte Ihnen helfen können, wenn Sie keinen Zugriff darauf haben. Es muss in der my.cnf Dateikonfiguration für MySQL erfolgen. Setzen Sie es nicht zu hoch oder Sie riskieren, dass Ihr MySQL-Serverprozess all Ihren Arbeitsspeicher verschlingt.

Ein zweiter Ansatz ermöglicht Ihnen, diese Gesamtverbindungen Ihren verschiedenen MySQL-Benutzern zuzuordnen. Wenn Sie für jede Ihrer Web-Apps unterschiedliche MySQL-Benutzernamen haben, funktioniert dieser Ansatz für Sie. Dieser Ansatz wird hier beschrieben.https://www.percona.com/blog/2014/07/29/prevent-mysql-downtime-set-max_user_connections/

Der letzte Ansatz zur Beherrschung dieses Problems ist subtiler. Sie verwenden wahrscheinlich den Apache-Webserver als zugrunde liegende Technologie. Sie können reduzieren die Anzahl der Apache-Aufgaben zur gleichen Zeit zu laufen, paradoxerweise erhöhen Durchsatz. Das liegt daran, dass Apache Anfragen in die Warteschlange stellt. Wenn es ein paar Aufgaben gibt, die effizient durch die Warteschlange schlagen, ist das oft schneller als viele Aufgaben, weil weniger Konflikte auftreten. Es erfordert auch weniger MySQL-Verbindungen, die Ihr unmittelbares Problem lösen werden. Das wird hier erklärt: Restart Mysql automatically when ubuntu on EC2 micro instance kills it when running out of memory

Übrigens verwenden Web-Anwendungen wie WordPress einen persistenten Verbindungspool. Das heißt, sie stellen Verbindungen zur MySQL-Datenbank her, halten sie offen und verwenden sie wieder. Wenn Ihre Apps ausgelastet sind, sollte die Lebensdauer jeder Verbindung mehrere Minuten betragen.

Verwandte Themen