'max_user_connections' 200 - noch immer Fehler
Hier ist die mysql-Fehler:
Verbindung fehlgeschlagen: User 'db2498' has exceeded the 'max_user_connections' resource (current value: 200).
Ich die meine.cnf:
[mysqld]
max_connections = 500
max_user_connections = 200
Ich die max_user_connections in der mysql Benutzer bis 200 auch. Ich habe 1400 Menschen trifft, die Website in etwa 10-20 Minuten. Jeden bleiben Sie auf für einen durchschnittlichen von 14 Sekunden, und ich bekam über 1400 dieser Nachrichten.
Ich bin mit PHP/Mysql. Dies ist die database-Klasse:
class DB{
public function __construct(){
$this->conn = new mysqli($this->host,$this->user,$this->pass,$this->db);
/* check connection */
}
public function selectSomething(){
/* select data & return */
}
public function __destruct()
{
$this->conn->close();
}
}
Dies ist, wie ich es nennen:
$conn = new DB();
$result = $conn->selectSomething();
/* do something */
$result = $conn->selectSomething();
/* do something */
$result = $conn->selectSomething();
/* do something */
Werden die Nutzer auf der Website für durchschnittlich 14 Sekunden. Warum bin ich immer diese Fehlermeldung? Ist es das zerstören? Muss ich die Datenbank-wrapper eingerichtet falsch? Ich bin verloren, und der tech-support nicht viel helfen.
InformationsquelleAutor Yipyo Ai | 2012-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als für "max verbindungen" - problem, es könnte sein, eines von drei Dingen:
1.) Der server hat zu viele offene verbindungen schon. Ein MySQL-server können nur eine bestimmte Anzahl offener verbindungen, bevor Sie nicht verweigern dürfen, und diese Grenze geteilt wird unter allen Nutzern des Servers. Es ist in der Regel ziemlich hoch, obwohl es leicht möglich für jemanden, der effektiv DoS einen MySQL-server, indem Sie jede Menge Anschlüsse (aber siehe unten)
2) Ihre Benutzer-Konto verfügt über eine begrenzte Anzahl von verbindungen pro Stunde - jede weitere verbindungen innerhalb dieser Stunde abgelehnt werden würde. Dies ist auf einer pro-Benutzer-basis.
3) Ihre Benutzer-Konten hat eine begrenzte Anzahl der zulässigen offenen verbindungen - weitere verbindungen abgelehnt werden würde. Dies ist auf einer pro-Benutzer-basis.
Ist es immer wichtig zu Lesen, dass die Fehlermeldung, die Sie erhalten, wieder auf die Verbindung, wie dies in den meisten Fällen wird genau festgelegt, den genauen Grund für den Ausfall.
Wenn Ihr Konto hat eine maximale Anzahl der verbindungen einschränken (Szenario #3), der Fehler wäre:
Code:
Wo 'mysqldba' wäre Ihren Benutzernamen, und der "aktuelle Wert" ist die maximale Anzahl der offenen verbindungen von diesem Benutzer.
Wenn Ihr Konto hat eine maximale Anzahl von verbindungen pro Stunde-Grenze (Szenario #2), der Fehler wäre:
Code:
Denen wieder 'mysqldba' wäre Ihren Benutzernamen, und der "aktuelle Wert" ist die maximale Anzahl von verbindungen pro Stunde erlaubt für diesen Benutzer.
Wenn du die Fehlermeldung (code 1040) zeigt an, dass der ganze MySQL server laufen hat, aus der Verbindung slots - dies ist der DoS-Szenario, das ich oben erwähnt.
Was kann man dagegen tun? Von dem, was Sie gesagt haben, Sie haben keine superuser-Rechte auf diesem server, also nichts, abgesehen von Klagen der SysAdmin zuständig für die server. Sie könnte erhöhen Sie die maximale Anzahl von erlaubten verbindungen, die das problem lösen könnte kurzfristig, aber wenn jemand anderes mit dem server erstellen ist eine dumme Anzahl der Datenbank-verbindungen, die slots würden nur füllen sich wieder. Was Sie wahrscheinlich tun sollten, ist auch die Durchsetzung einer pro-Benutzer maximale offene Verbindung begrenzt ist - das wäre halt die heavy user verstopfen die server. In einem shared-server situation wie du, das würde am meisten Sinn machen - 'power-user' würde/sollte haben Ihre eigenen server, oder kann/soll zahlen, erhöhen Ihre maximal offenen verbindungen.
Ich vermute, dass die Verbindung nicht korrekt geschlossen. Können Sie versuchen, verwenden Sie persistente Verbindung statt, d.h. mysql_pconnect(...), manchmal sind die mysqli wrapper ist nicht normal arbeiten...
tot auf. Stellen Sie sicher, dass Sie mit mysqli::close, nachdem Sie fertig mit Ihren Fragen.
InformationsquelleAutor bodi0