Come posso risolvere l'errore "Got an error reading communication packets" in Amazon RDS per MySQL o Aurora compatibile con MySQL?

5 minuti di lettura
0

Ho ricevuto l'errore "Got an error reading communication packets". Voglio risolvere questo errore in un'istanza database Amazon Relational Database Service (Amazon RDS) per MySQL o Amazon Aurora compatibile con MySQL.

Breve descrizione

Se le connessioni server-client vengono interrotte, vengono chiuse in modo errato o non vanno a buon fine, Amazon RDS incrementa il contatore di stato per aborted_clients o aborted_connects. Il parametro aborted_clients descrive il numero di connessioni interrotte perché il client si è interrotto senza chiudere correttamente la connessione. Il parametro aborted_connects descrive il numero di tentativi falliti di connessione al server MySQL.

log_error_verbosity specifica il dettaglio per la gestione degli eventi destinati al log degli errori. Se il valore di questo parametro è superiore a 2, RDS per MySQL registra questa informazione nel log degli errori:

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

Questo avviso viene attivato ogni volta che il contatore di stato per i valori della metrica aborted_clients o aborted_connects viene incrementato. Amazon RDS utilizza i log degli errori del database per recuperare queste informazioni. Per ulteriori informazioni, consulta Communication errors and aborted connections sul sito Web del server MySQL.

I fattori che possono attivare l'avviso di connessione interrotta includono, a titolo esemplificativo ma non esaustivo:

  • L'incompatibilità con client o driver
  • I firewall o proxy, che possono chiudere qualsiasi connessione inattiva o bloccare una connessione.
  • La chiusura errata di una connessione client-server, con conseguente aumento del numero di connessioni in sospeso all'interno di RDS per MySQL.
  • Un'applicazione client che interrompe una connessione in modo errato. Se le connessioni vengono lasciate inattive per un certo periodo di tempo, MySQL le chiuderà forzatamente. Verrà quindi visualizzato il messaggio Connessione interrotta.
  • Connessioni inattive che superano le soglie di wait_timeout o interactive_timeout.
  • Una connessione client che supera la soglia di secondi di connect_timeout quando ottiene un pacchetto di connessione.
  • Valori insufficienti per parametri come net_write_timeout e net_read_timeout.
  • Il valore del parametromax_allowed_packet viene superato. Se il valore è troppo piccolo o le query richiedono più memoria di quella allocata per RDS per MySQL, viene attivato l'avviso di Connessione interrotta.

Soluzione

Se ricevi un errore di connessione interrotta in RDS per MySQL o Aurora compatibile con MySQL, controlla i valori dei parametri MySQL. Dopo aver identificato la causa principale del problema, aggiorna il parametro e prova il nuovo valore, monitorando i log degli errori di MySQL.

Per risolvere l'errore di Connessione interrotta in Amazon RDS, prendi in considerazione questi metodi:

  • Verifica se stai utilizzando i valori predefiniti di un gruppo di parametri Amazon RDS. I valori predefiniti per i parametri relativi ai timeout di connettività potrebbero non essere appropriati per l'istanza database. Per ulteriori informazioni, consulta la sezione Parameters related to connectivity timeout di Best practices for configuring parameters for Amazon RDS for MySQL.
  • Imposta un valore più alto per connect_timeout per verificare se aiuta a ridurre i messaggi di errore relativi alla Connessione interrotta. Questo parametro specifica per quanto tempo (in secondi) l'istanza del server MySQL deve attendere prima di rispondere con un handshake errato.
  • Modifica interactive_timeout e wait_timeout. Le applicazioni che utilizzano i pool di connessioni (come Java) devono avere timeout che corrispondono alle impostazioni del pool di connessioni.
  • Aumenta il valore di max_allowed_packet se l'istanza deve gestire query di grandi dimensioni. Se una riga contiene più dati del valore max_allowed_packet per il client, verranno segnalati degli errori. Aumenta questo valore se utilizzi colonne BLOB di grandi dimensioni o stringhe lunghe. Per ulteriori informazioni, consulta la sezione max_allowed_packet di Best practices for configuring parameters for Amazon RDS for MySQL.
  • Aumenta i valori net_write_timeout e net_read_timeout. Nota: Questi valori possono essere impostati sullo stesso valore di wait_timeout.
  • Assicurati che le connessioni RDS per MySQL o Aurora compatibile con MySQL siano chiuse correttamente. Prima di uscire dal database, assicurati di chiamare la funzione mysql_close() dall'applicazione client.

Suggerimenti per la risoluzione dei problemi

Se ricevi ancora il messaggio di errore Connessione interrotta, prova i seguenti suggerimenti per la risoluzione dei problemi:

  • Attiva Performance Insights per recuperare l'intervallo di tempo delle istruzioni SQL che causano l'avviso. Per Aurora compatibile con MySQL, consulta Monitoraggio del carico DB con Performance Insights su Amazon Aurora.
  • Attiva la registrazione lenta delle query sulla tua istanza database Amazon RDS o Aurora MySQL. Ciò permette di acquisire e registrare tutte le query eseguite per un periodo più lungo di long_query_time, che per impostazione predefinita è di 10 secondi. Per ulteriori informazioni, consulta How do I activate and monitor logs for an Amazon RDS for MySQL DB instance?
  • Valuta la possibilità di attivare i log di flusso VPC. I log di flusso VPC consentono di vedere da quale lato (client/server) è stata chiusa la connessione.
  • Assicurati che la tua applicazione abbia chiuso correttamente la connessione da MySQL.
  • Esegui il comando tcpdump dal computer su cui è in esecuzione il client per testare le acquisizioni di pacchetti di esempio. Ad esempio:
sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100

Informazioni correlate

How do I modify the values of an Amazon RDS DB parameter group?

Perché le connessioni al database sulla mia istanza di database di RDS si sono interrotte?

How can I turn on logs on an Aurora Serverless cluster so I can view and download the logs?