MySql: Fragen zu max_user_connections


guenter024

Erfahrenes Mitglied
#1
Hallo lieben Forumsgemeinde,
ich hätte dazu ein paar Fragen:

a)
in der MySql Referez steht, das "Only statements that modify databases or tables count against the update limit".
Leider verstehe ich das nicht ganz.
Wenn ich z.B. meine Seite aufrufe verbinde ich diese per PHP mit der MySql-Datenbank, welche in $mysqli gespeichert wird.
Am Ende der Seite wird die MySql-Verbindung wieder geschlossen $mysqli->close();
Zählt nicht dieses als Verbindung? Das hat doch nichts mit den Statements bzw. Queries zu tun, oder?

b)
Z.B. Folgender Fall tritt ein:
PHP Warning: mysqli_connect(): (HY000/1203): User ... already has more than 'max_user_connections' active connections in /pfad/zur/verbindung.php
Was genau geschieht hier?
Wird nur der aktuell anfragende Seitenbesucher abgewiesen oder wird die Datenbank länger gesperrt?
Wenn ich bspw. in meinem php-skript im Falle einer abgewiesenen Verbindung (mysqli_connect_error() hat obige Fehlermeldung) ein sleep(2) setze und dann die Funktion zur Datenbank-Verbindung neu aufrufe bei maximal 5 möglichen Versuchen, wird dann die Verbindung auch für andere Seitenbesucher für diese Zeit blockiert oder werden diese derweil zugelassen, falls andere Verbindungen geschlossen wurden?
Oder sollte ich das Skript gleich beim ersten Verbindungsversuch mit Fehler abbrechen?

c)
Wie lange zählt die Verbindung als aktiv?
Wenn die Skriptlaufzeit selbst ja nicht mal eine Sekunde ist, sind dann bei einem Wert von max_user_connections=20 je Sekunde theoretisch an die ca. 20 Seitenbesucher möglich?


Ich hoffe meine Fragen sind verständlich.
Ich frage deswegen, weil ich die Meldung max_user_connections im error_log alle paar Tage mal immer wieder finde (sonst ist dort alles sauber :) ).
Laut access-Log wird dies durch unseriöse Bots ausgelöst, die innerhalb einer Sekunde mehrere Seitenanfragen gleichzeitig losschicken (Laut IP-Geo-Information irgendwo aus Russland).
Die Anfragen sehen dann in etwa so aus www.example.com/pfad/seite%20and%201%3D1 -> probiert ob SQL-Injections möglich sind.
Ich bekomme da eine richtige Wut auf diese Menschen, die sowas machen.
Um eine Lösung zu finden wie ich das am Besten abwehren kann, aber gleichzeitig nicht die normalen Seitenbesucher oder bspw. google zu blockieren, möchte ich das besser verstehen.

Über eine Hilfe zu meinen Fragen würde ich mich sehr freuen.
Wenn jemand eine Idee zum Blockieren dieser Anfragen hat, bin ich auch für alle Lösungsvorschläge offen.


Viele Grüße