Wie behebe ich den Fehler „Beim Lesen von Kommunikationspaketen ist ein Fehler aufgetreten“ in Amazon RDS für MySQL oder Aurora MySQL-kompatibel?

Lesedauer: 5 Minute
0

Ich habe die Fehlermeldung „Beim Lesen von Kommunikationspaketen ist ein Fehler aufgetreten“ erhalten. Ich möchte diesen Fehler in einer Amazon Relational Database Service (Amazon RDS) für MySQL oder Amazon Aurora MySQL-kompatiblen Edition-DB-Instance beheben.

Kurzbeschreibung

Wenn Server-Client-Verbindungen unterbrochen, nicht ordnungsgemäß geschlossen werden oder erfolglos sind, erhöht Amazon RDS den Statuszähler für abgebrochene_clients oder abgebrochene_connects. Der Parameter aborted_clients beschreibt die Anzahl der Verbindungen, die abgebrochen wurden, weil der Client abgebrochen wurde, ohne die Verbindung ordnungsgemäß zu schließen. Der Parameter aborted_connects beschreibt die Anzahl der fehlgeschlagenen Versuche, eine Verbindung zum MySQL-Server herzustellen.

log_error_verbosity gibt die Ausführlichkeit für die Behandlung von Ereignissen an, die für das Fehlerprotokoll vorgesehen sind. Wenn der Wert dieses Parameters einen Wert von 2 überschreitet, schreibt RDS für MySQL diese Information in Ihr Fehlerprotokoll:

[Warning] Aborted connection xxx to db: '<database name>' user: '<user name>' host: '<host IP>' (Got an error reading communication packets)

Diese Warnung wird immer dann ausgelöst, wenn der Statuszähler für die Metrikwerte aborted_clients oder aborted_connects erhöht wird. Amazon RDS verwendet die Datenbank-Fehlerprotokolle, um diese Informationen abzurufen. Weitere Informationen finden Sie unter Kommunikationsfehler und abgebrochene Verbindungen auf der MySQL-Server-Website.

Zu den Faktoren, die die Warnung Verbindungsabbruch auslösen können, gehören unter anderem:

  • Client- oder Treiberinkompatibilität
  • Firewalls oder Proxys, die inaktive Verbindungen schließen oder eine Verbindung blockieren können.
  • Unsachgemäßes Schließen einer Client-Server-Verbindung, was zu einer höheren Anzahl von inaktiven Verbindungen innerhalb von RDS für MySQL führt.
  • Eine Client-Anwendung, die eine Verbindung unsachgemäß beendet. Wenn Verbindungen für eine bestimmte Zeit inaktiv bleiben, schließt MySQL diese Verbindungen zwangsweise. Anschließend wird die Meldung Abgebrochen der Verbindung angezeigt.
  • Verbindungen im Leerlauf, die die Schwellenwerte wait_timeout oder interactive_timeout überschreiten.
  • Eine Clientverbindung, die beim Abrufen eines Verbindungspakets den Schwellenwert von connect_timeout in Sekunden überschreitet.
  • Unzureichende Werte für Parameter wie net_write_timeout und net_read_timeout.
  • Der maximale_allowed_packet-Parameterwert wurde überschritten. Wenn der Wert zu klein ist oder Abfragen mehr Speicher benötigen, als RDS für MySQL zugewiesen ist, löst dies die Warnung Abbruch der Verbindung aus.

Behebung

Wenn Sie in RDS für MySQL oder Aurora MySQL-Compatible einen Aborted-Verbindung-Fehler erhalten, überprüfen Sie unbedingt Ihre MySQL-Parameterwerte. Nachdem Sie die Ursache Ihres Problems identifiziert haben, aktualisieren Sie den Parameter und testen Sie den neuen Wert, während Überwachen Sie die MySQL-Fehlerprotokolle.

Beachten Sie bei der Behebung des Fehlers Verbindungsabbruch in Amazon RDS die folgenden Vorgehensweisen:

  • Prüfen Sie, ob Sie die Standardwerte einer Amazon RDS-Parametergruppe verwenden. Die Standardwerte für Parameter im Zusammenhang mit Konnektivitäts-Timeouts sind möglicherweise nicht für Ihre DB-Instance geeignet. Weitere Informationen finden Sie im Abschnitt Parameter im Zusammenhang mit dem Connectivity-Timeout unter Bewährte Methoden zur Konfiguration von Parametern für Amazon RDS für MySQL.
  • Stellen Sie einen höheren Wert für connect_timeout ein, um zu sehen, ob dies dazu beiträgt, das Auftreten von Fehlermeldungen beim Verbindungsabbruch zu reduzieren. Dieser Parameter gibt an, wie lange die MySQL-Serverinstanz warten muss (in Sekunden), bevor sie mit einem schlechten Handshake reagiert.
  • Ändern Sie das interaktive_timeout und wait_timeout. Anwendungen, die Verbindungspooling verwenden (wie Java), müssen über Timeouts verfügen, die den Verbindungspool-Einstellungen entsprechen.
  • Erhöhen Sie den Wert von max_allowed_packet, wenn die Instanz große Abfragen verarbeiten muss. Wenn eine Zeile mehr Daten enthält als der maximale_allowed_packet-Wert für den Client, werden Fehler gemeldet. Erhöhen Sie diesen Wert, wenn Sie große BLOB-Spalten oder lange Zeichenketten verwenden. Weitere Informationen finden Sie im Abschnitt max_allowed_packet unter Bewährte Methoden zur Konfiguration von Parametern für Amazon RDS für MySQL.
  • Erhöhen Sie die Werte net_write_timeout und net_read_timeout. Hinweis: Diese Werte können auf den gleichen Wert wie wait_timeout gesetzt werden.
  • Stellen Sie sicher, dass die mit RDS für MySQL oder Aurora MySQL kompatiblen Verbindungen ordnungsgemäß geschlossen sind. Bevor Sie die Datenbank verlassen, stellen Sie sicher, dass Sie die Funktion mysql_close() von der Client-Anwendung aus aufrufen.

Tipps zur Problembehebung

Wenn du immer noch die Fehlermeldung Verbindung abgebrochen erhältst, probiere die folgenden Tipps zur Fehlerbehebung aus:

  • Aktivieren Sie Performance Insights, um den Zeitrahmen der SQL-Anweisungen abzurufen, die die Warnung auslösen. Informationen zur Aurora MySQL-Kompatibilität finden Sie unter Überwachen der DB-Auslastung mit Performance Insights auf Amazon Aurora.
  • Schalten Sie die langsame Abfrageprotokollierung auf Ihrer Amazon RDS- oder Aurora MySQL-DB-Instance ein. Dadurch werden alle Abfragen erfasst und protokolliert, die länger als long_query_time laufen, was standardmäßig 10 Sekunden beträgt. Weitere Informationen finden Sie unter Wie aktiviere und überwache ich Protokolle für eine Amazon RDS for MySQL-DB-Instance?
  • Erwägen Sie, VPC Flow Logs zu aktivieren. Mit VPC Flow Logs können Sie sehen, von welcher Seite (Client/Server) aus die Verbindung geschlossen wird.
  • Stellen Sie sicher, dass Ihre Anwendung die Verbindung zu MySQL ordnungsgemäß geschlossen hat.
  • Führen Sie den Befehl tcpdump auf dem Computer aus, auf dem der Client ausgeführt wird, um Beispielpaketerfassungen zu testen. Zum Beispiel:
sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100

Ähnliche Informationen

Wie ändere ich die Werte einer Amazon RDS DB-Parametergruppe?

Warum wurden DB-Verbindungen auf meiner RDS-DB-Instance unterbrochen?

Wie kann ich Protokolle auf einem Aurora Serverless-Cluster aktivieren, damit ich die Protokolle anzeigen und herunterladen kann?