Risoluzione dei problemi di connessione per i database Aurora MySQL - Amazon Aurora

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Risoluzione dei problemi di connessione per i database Aurora MySQL

Garantire una connettività affidabile tra le applicazioni e l’istanza database RDS è fondamentale per il corretto funzionamento dei carichi di lavoro. Tuttavia, i problemi di connettività possono insorgere a causa di vari fattori, come configurazioni di rete, problemi di autenticazione o vincoli delle risorse. Lo scopo di questa guida è fornire un approccio completo alla risoluzione dei problemi di connettività con Aurora MySQL.

Identificazione dei problemi di connettività del database per Aurora MySQL

L’identificazione della categoria specifica del problema di connettività può risultare utile per restringere le potenziali cause e guidare il processo di risoluzione dei problemi. Ogni categoria potrebbe richiedere approcci e tecniche di diagnosi e risoluzione diversi. I problemi di connettività dei database possono essere generalmente classificati nelle categorie indicate di seguito.

Errori ed eccezioni di connessione

Gli errori e le eccezioni di connessione possono verificarsi per vari motivi, ad esempio stringhe di connessione errate, errori di autenticazione, interruzioni della rete o problemi del server di database. Le cause possono includere parametri di connessione configurati non correttamente, credenziali non valide, interruzioni della rete o arresti anomali o riavvii del server di database. Anche i gruppi di sicurezza configurati non correttamente, le impostazioni del cloud privato virtuale (VPC), le liste di controllo degli accessi (ACL) di rete e le tabelle di routing associate alle sottoreti possono causare problemi di connessione.

Limite di connessioni raggiunto

Questo problema si verifica quando il numero di connessioni simultanee al server del database supera il limite massimo consentito. I server di database hanno in genere un limite massimo di connessioni configurabile definito dal parametro max_connections nei gruppi di parametri dei cluster e delle istanze. Stabilire un limite di connessione consente al server di database di disporre di risorse sufficienti (ad esempio memoria, CPU e handle di file) per gestire le connessioni esistenti in modo efficiente e fornire prestazioni accettabili. Le cause possono includere perdite di connessione nell’applicazione, un pool di connessioni inefficiente o un aumento imprevisto delle richieste di connessione.

Timeout di connessione.

I timeout di connessione si verificano quando l’applicazione client non è in grado di stabilire una connessione con il server del database entro un periodo di timeout specificato. Le cause più comuni includono problemi di rete, sovraccarico del server, regole del firewall e impostazioni di connessione configurate non correttamente.

Timeout per connessione inattiva

Le connessioni inattive che rimangono tali per un periodo prolungato potrebbero essere chiuse automaticamente dal server del database per risparmiare risorse. Questo timeout è in genere configurabile utilizzando wait_timeout e interactive_timeout parameters e deve essere modificato in base ai modelli di utilizzo della connessione dell’applicazione. Le cause possono includere la logica dell’applicazione che lascia le connessioni inattive per periodi prolungati o una gestione impropria delle connessioni.

Disconnessione intermittente delle connessioni esistenti

Questa classe di errori si riferisce a uno scenario in cui le connessioni stabilite tra un’applicazione client e il database vengono interrotte o disconnesse in modo imprevisto a intervalli irregolari, nonostante siano attive e in uso. Queste disconnessioni sono intermittenti, ovvero si verificano a intervalli irregolari e in modo non uniforme. Le cause possono includere:

  • Problemi relativi al server di database, ad esempio riavvii o failover

  • Gestione impropria della connessione dell’applicazione

  • Problemi relativi al bilanciamento del carico e al proxy

  • Instabilità della rete

  • Problemi legati a componenti o middleware di terze parti coinvolti nel percorso di connessione

  • Timeout di esecuzione delle query

  • Limiti di risorse sul lato server o client

L’identificazione della causa principale attraverso il monitoraggio, la registrazione e l’analisi completi è fondamentale, mentre l’implementazione di una corretta gestione degli errori, di pool di connessioni e meccanismi di ripetizione dei tentativi può contribuire a mitigare l’impatto di queste disconnessioni intermittenti sulla funzionalità dell’applicazione e sulla relativa esperienza utente.

Raccolta di dati sui problemi di connettività per Aurora MySQL

La raccolta di dati completi relativi ai componenti dell’applicazione, del database, della rete e dell’infrastruttura è fondamentale per risolvere efficacemente i problemi di connettività tra un’applicazione e un database Aurora MySQL. Raccogliendo log, configurazioni e informazioni diagnostiche pertinenti, si ottengono informazioni preziose che possono aiutare a identificare la causa principale dei problemi di connettività e guidare verso una risoluzione appropriata.

I log e le configurazioni di rete, come le regole dei gruppi di sicurezza, le impostazioni dei VPC e le tabelle di routing, sono essenziali per identificare potenziali colli di bottiglia o configurazioni errate relativi alla rete che potrebbero impedire all’applicazione di stabilire una connessione corretta con il database. L’analisi di questi componenti di rete consente di verificare che le porte necessarie siano aperte, che gli indirizzi IP siano consentiti e che le configurazioni di routing siano impostate correttamente.

Timestamp

Registra i timestamp esatti in cui si verificano i problemi di connettività. Questo può contribuire a identificare i modelli o a correlare i problemi con altri eventi o attività.

Log del motore di database

Oltre ai log del database generali, esamina anche i log del motore di database (ad esempio, il log degli errori MySQL e il log delle query lente) per trovare eventuali informazioni o errori pertinenti che potrebbero essere correlati ai problemi di intermittenza della connettività. Per ulteriori informazioni, consulta Registrazione di log per i database Aurora MySQL.

Log delle applicazioni client

Raccogli log dettagliati dalle applicazioni client che si connettono al database. I log delle applicazioni forniscono visibilità sui tentativi di connessione, sugli errori e su qualsiasi informazione rilevante dal punto di vista dell’applicazione, favorendo così il rilevamento di problemi relativi alle stringhe di connessione, alle credenziali di autenticazione o alla gestione della connessione a livello di applicazione.

I log del database, d’altra parte, offrono informazioni sugli errori riguardanti il lato database, sulle query lente o sugli eventi che potrebbero contribuire ai problemi di connettività. Per ulteriori informazioni, consulta Registrazione di log per i database Aurora MySQL.

Variabili dell’ambiente client

Verifica se eventuali variabili di ambiente o impostazioni di configurazione sul lato client, come le impostazioni del proxy, le impostazioni SSL/TLS o altre variabili rilevanti, potrebbero influire sulla connessione al database.

Versioni della libreria client

Assicurati che il client disponga delle versioni più recenti di tutti i driver, le librerie o i framework di database utilizzati per la connettività del database. Le versioni obsolete possono presentare problemi noti o problemi di compatibilità.

Acquisizione di rete del client

Esegui un’acquisizione di rete sul lato client utilizzando uno strumento come Wireshark o tcpdump durante i periodi in cui si verificano problemi di connettività. Questo può aiutare a identificare eventuali problemi o anomalie relativi alla rete sul lato client.

Topologia della rete del client

Approfondisci la conoscenza della topologia di rete del client, inclusi eventuali firewall, bilanciatori del carico o altri componenti, come Server proxy per RDS o Proxy SQL, che effettuano connessioni al database al posto delle connessioni dirette del client.

Impostazioni del sistema operativo del client

Controlla le impostazioni del sistema operativo del client che potrebbero influire sulla connettività di rete, come le regole del firewall, le impostazioni degli adattatori di rete e qualsiasi altra impostazione rilevante.

Configurazione del pool di connessioni

Se nella tua applicazione utilizzi un meccanismo di pool di connessioni, esamina le impostazioni di configurazione e monitora le metriche (ad esempio, connessioni attive, connessioni inattive e timeout di connessione) per assicurarti che il pool funzioni correttamente. Controlla anche impostazioni quali la dimensione minima e massima del pool e le impostazioni di convalida della connessione, per assicurarti che siano configurate correttamente.

Stringa di connessione

La stringa di connessione include in genere parametri come il nome host o l’endpoint, il numero di porta, il nome del database e le credenziali di autenticazione. L’analisi della stringa di connessione può aiutare a identificare potenziali configurazioni o impostazioni errate che potrebbero causare problemi di connettività. Ad esempio, un nome host o un numero di porta errato può impedire al client di raggiungere l’istanza del database, mentre credenziali di autenticazione non valide possono causare errori di autenticazione e il rifiuto della connessione. Inoltre, la stringa di connessione può rivelare problemi relativi al pool di connessioni, ai timeout o ad altre impostazioni specifiche della connessione che potrebbero contribuire a creare problemi di connettività. Fornire la stringa di connessione completa utilizzata dall’applicazione client può aiutare a individuare eventuali errori di configurazione sul client.

Parametri del database

Monitora i parametri del database come l’utilizzo della CPU e della memoria e l’I/O del disco nei periodi in cui si verificano problemi di connettività. Questo può aiutare a comprendere se l’istanza database presenta un conflitto di risorse o problemi di prestazioni.

DB engine version (Versione motore del database

Verifica la versione del motore di database di Aurora MySQL. AWS rilascia regolarmente aggiornamenti che risolvono problemi noti e vulnerabilità della sicurezza, oltre a introdurre miglioramenti delle prestazioni. È quindi fortemente consigliato eseguire l’aggiornamento alle versioni più recenti disponibili, poiché tali aggiornamenti spesso includono correzioni di bug e miglioramenti specificamente correlati a connettività, prestazioni e stabilità. Fornire informazioni sulla versione del database, insieme agli altri dettagli raccolti, può aiutare Support a diagnosticare e risolvere efficacemente i problemi di connettività.

Parametri di rete

Raccogli parametri di rete come latenza, perdita di pacchetti e throughput durante i periodi in cui si verificano problemi di connettività. Strumenti come ping, traceroute e per il monitoraggio della rete semplificano la raccolta di questi dati.

Dettagli su origine e client

Determina gli indirizzi IP dei server di applicazioni, dei bilanciatori del carico o di qualsiasi altro componente che avvia le connessioni al database. Potrebbe trattarsi di un singolo indirizzo IP o di un intervallo di indirizzi IP (notazione CIDR). Se l’origine è un’istanza Amazon EC2, è utile esaminare anche il tipo, la zona di disponibilità, l’ID della sottorete e i gruppi di sicurezza a essa associati, nonché i dettagli dell’interfaccia di rete come indirizzo IP privato e indirizzo IP pubblico.

Un’analisi approfondita dei dati raccolti consente di identificare configurazioni errate, vincoli di risorse, interruzioni della rete o altri problemi di base che causano problemi di connettività intermittenti o persistenti. Queste informazioni permettono di intraprendere azioni mirate, come la modifica delle configurazioni, la risoluzione di problemi di rete o la gestione delle connessioni a livello di applicazione.

Monitoraggio delle connessioni al database per Aurora MySQL

Per monitorare e risolvere i problemi di connettività, è possibile utilizzare le seguenti metriche e funzionalità.

Metriche CloudWatch
  • CPUUtilization: un elevato utilizzo della CPU sull’istanza database può rallentare l’esecuzione delle query, con conseguenti timeout o rifiuti di connessione.

  • DatabaseConnections: monitora il numero di connessioni attive all’istanza database. Un numero elevato di connessioni, vicino al massimo configurato, può indicare potenziali problemi di connettività o l’esaurimento del pool di connessioni.

  • FreeableMemory: una scarsa disponibilità di memoria può causare problemi di prestazioni e di connettività a causa di limiti di risorse.

  • NetworkReceiveThroughput e NetworkTransmitThroughput: picchi o cali insoliti del throughput di rete possono indicare problemi di connettività o colli di bottiglia della rete.

Parametri Performance Insights

Per risolvere i problemi di connettività in Aurora MySQL utilizzando Approfondimenti sulle prestazioni, analizza metriche del database come le seguenti:

  • Aborted_clients

  • Aborted_connects

  • Connessioni

  • max_connections

  • Threads_connected

  • Threads_created

  • Threads_running

Queste metriche possono aiutarti a identificare i colli di bottiglia della connessione, rilevare problemi di rete o di autenticazione, ottimizzare il pooling delle connessioni e garantire una gestione efficiente dei thread. Per ulteriori informazioni, consulta Contatori di Performance Insights per Aurora MySQL.

Funzionalità di Approfondimenti sulle prestazioni
  • Carico del database: visualizza il carico del database nel tempo e mettilo in relazione con i problemi di connettività o il degrado delle prestazioni.

  • Statistiche SQL: analizza le statistiche SQL per identificare query o operazioni di database inefficienti che potrebbero contribuire a creare problemi di connettività.

  • Query principali: identifica e analizza le query che richiedono più risorse per individuare potenziali rallentamenti delle prestazioni o le query di lunga durata che potrebbero causare problemi di connettività.

Il monitoraggio di queste metriche e il ricorso ad Approfondimenti sulle prestazioni consentono di ottenere visibilità sulle prestazioni dell’istanza database, sull’utilizzo delle risorse e sui potenziali colli di bottiglia che potrebbero causare problemi di connettività. Per esempio:

  • Un valore DatabaseConnections vicino al limite massimo può indicare l’esaurimento del pool di connessioni o una gestione impropria della connessione, con conseguenti problemi di connettività.

  • Un valore di CPUUtilization elevato o di FreeableMemory ridotto può indicare vincoli delle risorse, che possono causare il rallentamento dell’esecuzione delle query e timeout o rifiuti di connessione.

  • Analizzare Query principali e Statistiche SQL semplifica l’identificazione delle query inefficienti o a uso intensivo delle risorse che potrebbero contribuire a creare problemi di connettività.

Inoltre, il monitoraggio dei log di CloudWatch e l’impostazione degli allarmi possono aiutarti a identificare i problemi di connettività e rispondere in modo proattivo prima che si aggravino.

È importante notare che, sebbene questi parametri e strumenti possano fornire informazioni preziose, devono essere utilizzati insieme ad altre fasi di risoluzione dei problemi. Inoltre, esaminando le configurazioni di rete, le regole dei gruppi di sicurezza e la gestione delle connessioni a livello di applicazione, è possibile diagnosticare e risolvere in modo completo i problemi di connettività con le istanze database Aurora MySQL.

Monitoraggio aggiuntivo per Aurora MySQL

Metriche CloudWatch
  • AbortedClients: traccia il numero di connessioni client che non sono state chiuse correttamente.

  • AuroraSlowConnectionHandleCount: traccia del numero di operazioni di gestione delle connessioni lente, indicando potenziali problemi di connettività o colli di bottiglia delle prestazioni.

  • AuroraSlowHandshakeCount: misura il numero di operazioni di handshake lente, un indicatore di possibili problemi di connettività.

  • ConnectionAttempts: misura il numero di tentativi di connessione effettuati all’istanza database Aurora MySQL.

Variabili di stato globali

Aurora_external_connection_count: mostra il numero di connessioni database all’istanza database, ad esclusione delle connessioni al servizio RDS utilizzate per i controlli dell’integrità del database.

Monitorare questi parametri e le variabili di stato globali permette di ottenere visibilità sui modelli di connessione, sugli errori e sui potenziali colli di bottiglia che potrebbero causare problemi di connettività con l’istanza MySQL di Amazon Aurora.

Ad esempio, un numero elevato di AbortedClients o AuroraSlowConnectionHandleCount può indicare problemi di connettività.

Inoltre, la configurazione di allarmi e notifiche CloudWatch può aiutarti a identificare ai problemi di connettività e rispondere in modo proattivo prima che si aggravino e influiscano sulle prestazioni dell’applicazione.

Codici di errore di connettività per Aurora MySQL

Di seguito sono riportati alcuni errori di connettività comuni per i database Aurora MySQL, insieme ai relativi codici di errore e alle spiegazioni correlate.

Codice di errore 1040: Too many connections

Questo errore si verifica quando il client tenta di stabilire un numero di connessioni superiore al massimo consentito dal server del database. Le cause possibili sono:

  • Configurazione errata del pool di connessioni: se utilizzi un meccanismo di pool di connessioni, assicurati che la dimensione massima del pool non sia troppo elevata e che le connessioni vengano rilasciate correttamente al pool.

  • Configurazione dell’istanza database: verifica l’impostazione del numero massimo di connessioni consentite per l’istanza database e, se necessario, modificala impostando il parametro max_connections.

  • Concorrenza elevata: se più client o applicazioni si connettono contemporaneamente al database, è possibile raggiungere il limite massimo di connessioni consentito.

Codice di errore 1045: Access denied for user '...'@'...' (using password: YES/NO)

Questo errore indica un problema di autenticazione durante il tentativo di connessione al database. Le cause possibili sono:

  • Compatibilità del plug-in di autenticazione: verifica se il plug-in di autenticazione utilizzato dal client è compatibile con il meccanismo di autenticazione del server di database.

  • Nome utente o password errati: verifica che nella stringa di connessione o nel meccanismo di autenticazione vengano utilizzati il nome utente e la password corretti.

  • Autorizzazioni utente: assicurati che l’utente disponga delle autorizzazioni necessarie per connettersi all’istanza database dall’host o dalla rete specificati.

Codice di errore 1049: Unknown database '...'

Questo errore indica che il client sta tentando di connettersi a un database che non esiste sul server. Le cause possibili sono:

  • Database non creato: assicurati che il database specificato sia stato creato nel server di database.

  • Nome del database errato: ricontrolla il nome del database utilizzato nella stringa di connessione o nella query per verificarne la precisione.

  • Autorizzazioni utente: verifica che l’utente disponga delle autorizzazioni necessarie per accedere al database specificato.

Codice di errore 1153: Got a packet bigger than 'max_allowed_packet' bytes

Questo errore si verifica quando il client tenta di inviare o ricevere dati che superano la dimensione massima dei pacchetti consentita dal server di database. Le cause possibili sono:

  • Set di query o di risultati di grandi dimensioni: se le query eseguite coinvolgono grandi quantità di dati, è possibile che il limite di dimensione dei pacchetti venga superato.

  • Impostazioni delle dimensioni dei pacchetti configurate non correttamente: controlla l’impostazione max_allowed_packetsul server del database e modificala se necessario.

  • Problemi di configurazione della rete: assicurati che la configurazione di rete (ad esempio, la dimensione MTU) consenta le dimensioni dei pacchetti richieste.

Codice di errore 1226: User '...' has exceeded the 'max_user_connections' resource (current value: ...)

Questo errore indica che l’utente ha superato il numero massimo di connessioni simultanee consentite dal server del database. Le cause possibili sono:

  • Configurazione errata del pool di connessioni: se utilizzi un meccanismo di pool di connessioni, assicurati che la dimensione massima del pool non sia troppo elevata per il limite di connessioni utente.

  • Configurazione dell’istanza database: verifica l’impostazione max_user_connections per l’istanza database e, se necessario, modificala.

  • Concorrenza elevata: se più client o applicazioni si connettono contemporaneamente al database con lo stesso utente, è possibile raggiungere il limite di connessioni specifiche per utente consentito.

Codice di errore 2003: Can't connect to MySQL server on '...' (10061)

Questo errore si verifica in genere quando il client non è in grado di stabilire una connessione TCP/IP con il server del database. Può essere causato da vari problemi, tra cui:

  • Stato dell’istanza database: assicurati che lo stato dell’istanza database sia available e che non siano in corso operazioni di manutenzione o backup.

  • Regole del firewall: verifica se alcuni firewall (sistema operativo, rete o gruppo di sicurezza) stanno bloccando la connessione sulla porta specificata (in genere, la 3306 per MySQL).

  • Nome host o endpoint errato: assicurati che il nome host o l’endpoint utilizzato nella stringa di connessione sia corretto e corrisponda all’istanza database.

  • Problemi di connettività di rete: verifica che il computer client possa raggiungere l’istanza del database attraverso la rete. Controlla se sono presenti eventuali interruzioni di rete, problemi di routing o configurazioni errate del VPC o della sottorete.

Codice di errore 2005: Unknown MySQL server host '...' (11001)

Questo errore si verifica quando il client non è in grado di risolvere il nome host o l’endpoint del server di database in un indirizzo IP. Le cause possibili sono:

  • Problemi di risoluzione DNS: verifica che il computer client sia in grado di risolvere correttamente il nome host utilizzando DNS. Controlla le impostazioni DNS, la cache DNS e prova a utilizzare l’indirizzo IP anziché il nome host.

  • Nome host o endpoint errato: ricontrolla il nome host o l’endpoint utilizzato nella stringa di connessione per verificare che sia corretto.

  • Problemi di configurazione della rete: assicurati che la configurazione di rete del client (ad esempio, tabelle VPC, sottorete e tabelle di routing) consenta la risoluzione DNS e la connettività all’istanza del database.

Codice di errore 2026: SSL connection error

Questo errore si verifica quando si presenta un problema con la configurazione SSL/TLS o con la convalida del certificato durante il tentativo di connessione. Le cause possibili sono:

  • Scadenza del certificato: verifica se il certificato SSL/TLS utilizzato dal server è scaduto e deve essere rinnovato.

  • Problemi di convalida del certificato: verifica che il client sia in grado di convalidare correttamente il certificato SSL/TLS del server e che il certificato sia affidabile.

  • Problemi di configurazione della rete: assicurati che la configurazione della rete consenta connessioni SSL/TLS e non blocchi né interferisca con il processo di handshake SSL/TLS.

  • Mancata corrispondenza della configurazione SSL/TLS: assicurati che le impostazioni SSL/TLS (ad esempio, suite di crittografia e versioni del protocollo) sul client e sul server siano compatibili.

Comprendere le spiegazioni dettagliate e le potenziali cause di ogni codice di errore consente di migliorare la risoluzione dei problemi di connettività quando si utilizzano i database Aurora MySQL.

Suggerimenti per l’ottimizzazione dei parametri per Aurora MySQL

Numero massimo connessioni

La modifica di questi parametri può aiutare a prevenire i problemi di connessione causati dal raggiungimento del limite massimo di connessioni consentito. Assicurati che questi valori siano impostati in modo appropriato in base ai requisiti di concorrenza e ai vincoli di risorse dell’applicazione.

  • max_connections: questo parametro specifica il numero massimo consentito di connessioni simultanee all’istanza database.

  • max_user_connections: questo parametro può essere specificato durante la creazione e la modifica dell’utente e imposta il numero massimo di connessioni simultanee consentite per un account utente specifico.

Dimensione del buffer di rete

L’aumento di questi valori può migliorare le prestazioni della rete, in particolare per i carichi di lavoro che comportano trasferimenti di dati o set di risultati di grandi dimensioni. È tuttavia consigliabile prestare attenzione, poiché i buffer di dimensioni maggiori possono consumare più memoria.

  • net_buffer_length: questo parametro imposta la dimensione iniziale per la connessione del client e i buffer dei risultati, bilanciando l’utilizzo della memoria con le prestazioni delle query.

  • max_allowed_packet: questo parametro specifica la dimensione massima di un singolo pacchetto di rete che può essere inviato o ricevuto dall’istanza database.

Compressione di rete (lato client)

L’attivazione della compressione di rete può ridurre l’utilizzo della larghezza di banda della rete, ma può aumentare il sovraccarico della CPU sia sul lato client che sul lato server.

  • compress: questo parametro abilita o disabilita la compressione di rete per la comunicazione client/server.

  • compress_protocol: questo parametro specifica il protocollo di compressione da utilizzare per le comunicazioni di rete.

Ottimizzazione delle prestazioni di rete

La modifica di questi timeout può facilitare la gestione delle connessioni inattive e prevenire l’esaurimento delle risorse, ma occorre prestare attenzione, perché valori bassi possono causare interruzioni premature della connessione.

  • interactive_timeout: questo parametro specifica il numero di secondi in cui il server attende l’attività su una connessione interattiva prima di chiuderla.

  • wait_timeout: questo parametro determina il numero di secondi in cui il server attende l’attività su una connessione non interattiva prima di chiuderla.

Impostazioni di timeout di rete

La modifica di questi timeout può aiutare a risolvere i problemi relativi alle connessioni lente o che non rispondono. Attenzione, però, a non impostare valori troppo bassi, per evitare possibili interruzioni premature della connessione.

  • net_read_timeout: questo parametro specifica il numero di secondi di attesa di ulteriori dati da una connessione prima di terminare l’operazione di lettura.

  • net_write_timeout: questo parametro determina il numero di secondi di attesa per la scrittura di un blocco su una connessione prima di terminare l’operazione di scrittura.

Esempi di risoluzione dei problemi di connessione al database per Aurora MySQL

Negli esempi seguenti viene mostrato come identificare e risolvere i problemi di connessione al database per Aurora MySQL.

Esempio 1: risoluzione dei problemi relativi ai tentativi di connessione non riusciti

I tentativi di connessione possono avere esito negativo per diversi motivi, tra cui errori di autenticazione, errori di handshake SSL/TLS, limite max_connections raggiunto e vincoli di risorse sull’istanza database.

È possibile tenere traccia del numero di connessioni non riuscite da Approfondimenti sulle prestazioni o utilizzando il comando seguente.

mysql> show global status like 'aborted_connects'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Aborted_connects | 7 | +------------------+-------+ 1 row in set (0.00 sec)

Se il numero di Aborted_connects aumenta nel tempo, è possibile che l’applicazione presenti problemi di connettività intermittenti.

Puoi utilizzare le funzionalità di audit avanzato di Aurora per registrare le connessioni e le disconnessioni dalle connessioni client. A tale scopo, è possibile impostare i seguenti parametri nel gruppo di parametri del cluster di database:

  • server_audit_logging = 1

  • server_audit_events = CONNECT

Di seguito è riportato un estratto dei log di audit relativi a un accesso non riuscito.

1728498527380921,auora-mysql-node1,user_1,172.31.49.222,147189,0,FAILED_CONNECT,,,1045 1728498527380940,auora-mysql-node1,user_1,172.31.49.222,147189,0,DISCONNECT,,,0

Dove:

  • 1728498527380921 è il timestamp dell’epoch in cui si è verificato l’accesso non riuscito

  • aurora-mysql-node1 è l’identificatore dell’istanza del nodo del cluster Aurora MySQL su cui la connessione non è riuscita

  • user_1 è il nome dell’utente del database per il quale l’accesso non è riuscito

  • 172.31.49.222 è l’indirizzo IP privato del client da cui è stata stabilita la connessione

  • 147189 è l’ID di connessione dell’accesso non riuscito

  • FAILED_CONNECT: indica che la connessione non è riuscita

  • 1045 è il codice di restituito. Un valore diverso da zero indica un errore. In questo caso, 1045 corrisponde all’accesso negato.

Per ulteriori informazioni, consulta Server error codes e Client error codes nella documentazione di MySQL.

È inoltre possibile esaminare i log degli errori di Aurora MySQL per eventuali messaggi di errore correlati, ad esempio:

2024-10-09T19:26:59.310443Z 220 [Note] [MY-010926] [Server] Access denied for user 'user_1'@'172.31.49.222' (using password: YES) (sql_authentication.cc:1502)

Esempio 2: risoluzione dei problemi di disconnessione anomala del client

È possibile tenere traccia del numero di disconnessioni anomale dei client da Approfondimenti sulle prestazioni o utilizzando il comando seguente.

mysql> show global status like 'aborted_clients'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | Aborted_clients | 9 | +-----------------+-------+ 1 row in set (0.01 sec)

Se il numero di Aborted_clients aumenta nel tempo, significa che l’applicazione non chiude correttamente le connessioni al database. Se le connessioni non vengono chiuse correttamente, possono verificarsi perdite di risorse e potenziali problemi di prestazioni. Lasciare le connessioni aperte inutilmente può consumare risorse di sistema, come memoria e descrittori di file, con il rischio che l’applicazione o il server non risponda o si riavvii.

Per identificare gli account che non chiudono correttamente le connessioni, puoi utilizzare la seguente query, che recupera il nome dell’account utente, l’host da cui l’utente si connette, il numero di connessioni non chiuse e la percentuale di connessioni non chiuse.

SELECT ess.user, ess.host, (a.total_connections - a.current_connections) - ess.count_star AS not_closed, (((a.total_connections - a.current_connections) - ess.count_star) * 100) / (a.total_connections - a.current_connections) AS pct_not_closed FROM performance_schema.events_statements_summary_by_account_by_event_name AS ess JOIN performance_schema.accounts AS a ON (ess.user = a.user AND ess.host = a.host) WHERE ess.event_name = 'statement/com/quit' AND (a.total_connections - a.current_connections) > ess.count_star; +----------+---------------+------------+----------------+ | user | host | not_closed | pct_not_closed | +----------+---------------+------------+----------------+ | user1 | 172.31.49.222 | 1 | 33.3333 | | user1 | 172.31.93.250 | 1024 | 12.1021 | | user2 | 172.31.93.250 | 10 | 12.8551 | +----------+---------------+------------+----------------+ 3 rows in set (0.00 sec)

Dopo aver identificato gli account utente e gli host dai quali le connessioni non vengono chiuse, puoi procedere a controllare il codice che non chiude correttamente le connessioni.

Ad esempio, con il connettore MySQL in Python, puoi chiudere le connessioni utilizzando il metodo close() dell’oggetto di connessione. Ecco un esempio di funzione che stabilisce una connessione a un database, esegue una query e chiude la connessione:

import mysql.connector def execute_query(query): # Establish a connection to the database connection = mysql.connector.connect( host="your_host", user="your_username", password="your_password", database="your_database" ) try: # Create a cursor object cursor = connection.cursor() # Execute the query cursor.execute(query) # Fetch and process the results results = cursor.fetchall() for row in results: print(row) finally: # Close the cursor and connection cursor.close() connection.close()

In questo esempio, il metodo connection.close() viene chiamato nel blocco finally per assicurarsi che la connessione sia chiusa, indipendentemente dal fatto che si verifichi un’eccezione.