Was ist der Grund, warum Host 'host_name' in MySQL blockiert ist?

12

Wenn ich ein falsches Passwort verwende, um eine Verbindung zum MySQL-Server herzustellen, und die Testanzahl über dem liegt max_connect_errors, und ich finde, dass die Aborted_connectsauch als die Anzahl, die ich teste, auftritt, aber der Host immer noch nicht blockiert ist.

Ist also der Aborted_connectsüber den max_connect_errorsdann host_name gesperrte?

user3157
quelle

Antworten:

8

Zu diesem Zeitpunkt müssen Sie möglicherweise FLUSH HOSTS ausführen und prüfen, ob die Blockierung aufgehoben ist.

Die MySQL-Dokumentation sagt dies über FLUSH HOSTS:

  • Leert die Host-Cache-Tabellen. Sie sollten die Hosttabellen leeren, wenn einige Ihrer Hosts die IP-Adresse ändern oder die Fehlermeldung Host 'host_name' blockiert wird. Wenn mehr als max_connect_errors Fehler für einen bestimmten Host nacheinander auftreten, während eine Verbindung zum MySQL-Server hergestellt wird, geht MySQL davon aus, dass etwas nicht stimmt, und blockiert den Host für weitere Verbindungsanfragen. Das Leeren der Hosttabellen ermöglicht weitere Verbindungsversuche vom Host. Siehe auch Abschnitt C.5.2.6, „Host 'host_name' ist blockiert“. Sie können mysqld mit --max_connect_errors = 999999999 starten, um diese Fehlermeldung zu vermeiden.

Warum sollte ein Host zunächst blockiert werden?

Nach der MySQL-Dokumentation :

Wenn Sie die folgende Fehlermeldung erhalten, bedeutet dies, dass mysqld viele Verbindungsanforderungen vom Host 'host_name' erhalten hat, die in der Mitte unterbrochen wurden: Host 'host_name' ist wegen vieler Verbindungsfehler blockiert. Mit 'mysqladmin flush-hosts' entsperren Die Anzahl der zulässigen unterbrochenen Verbindungsanforderungen wird durch den Wert der Systemvariablen max_connect_errors bestimmt. Nachdem max_connect_errors Anfragen fehlgeschlagen sind, geht mysqld davon aus, dass etwas nicht stimmt (zum Beispiel, dass jemand versucht einzubrechen), und blockiert den Host für weitere Verbindungen, bis Sie einen mysqladmin flush-hosts-Befehl ausführen oder eine FLUSH HOSTS-Anweisung absetzen. Siehe auch Abschnitt 5.1.3, „Serversystemvariablen“.

Standardmäßig blockiert mysqld einen Host nach 10 Verbindungsfehlern. Sie können den Wert anpassen, indem Sie den Server wie folgt starten:

shell> mysqld_safe --max_connect_errors=10000 &

Wenn Sie diese Fehlermeldung für einen bestimmten Host erhalten, sollten Sie zunächst sicherstellen, dass mit den TCP / IP-Verbindungen von diesem Host nichts falsch ist. Wenn Sie Netzwerkprobleme haben, ist es nicht sinnvoll, den Wert der Variablen max_connect_errors zu erhöhen.

RolandoMySQLDBA
quelle
Es sieht nicht so aus, als würden diese Fehler in das normale MySQL-Fehlerprotokoll geschrieben. Gibt es eine Möglichkeit, ein Protokoll von Host-Blocking-Verbindungsfehlern anzuzeigen? Auch das "sukzessive" habe ich oben notiert. Benötigen Sie nur eine erfolgreiche Verbindung dazwischen? Oder sollte ich nur eine neue Frage stellen?
Marc L.
1

Eine Ursache für eine solche Blockierung ist, dass eine zufällige Person auf dem Host entscheidet, MySQL zu überwachen und ein Telnet für den MySQL-Port auf dem Remote-Server einzurichten. Bei einer ausreichenden Anzahl von Telnet-Aufrufen wird der Host für den weiteren Zugriff auf diesen MySQL-Server gesperrt. Im Gegensatz zu einigen Servern gibt MySQL den Zugriff nicht automatisch nach einer angemessenen Zeit frei: Der Serveradministrator muss MySQL auf den Kopf stellen.

Richard
quelle