Risolvere i problemi di connettività in Database di Azure per MySQL - Server flessibile

SI APPLICA A: Database di Azure per MySQL - Server singolo Database di Azure per MySQL - Server flessibile

Importante

Database di Azure per MySQL server singolo si trova nel percorso di ritiro. È consigliabile eseguire l'aggiornamento a Database di Azure per MySQL server flessibile. Per altre informazioni sulla migrazione a Database di Azure per MySQL server flessibile, vedere Che cosa accade a Database di Azure per MySQL server singolo?

MySQL Community Edition gestisce le connessioni usando un thread per ogni connessione. Di conseguenza, ogni connessione utente ottiene un thread del sistema operativo dedicato nel processo mysqld.

Esistono potenziali problemi associati a questo tipo di gestione delle connessioni. Ad esempio, l'uso della memoria è relativamente elevato se è presente un numero elevato di connessioni utente, anche se sono connessioni inattive. Inoltre, esiste un livello superiore di contesa interna del server e sovraccarico del cambio di contesto quando si lavora con migliaia di connessioni utente.

Diagnosi di errori di connettività comuni

Ogni volta che l'istanza di Database di Azure per MySQL server flessibile riscontra problemi di connettività, tenere presente che i problemi possono verificarsi in uno dei tre livelli coinvolti: il dispositivo client, la rete o l'istanza del server flessibile Database di Azure per MySQL.

Di conseguenza, ogni volta che si diagnosticano gli errori di connettività, assicurarsi di prendere in considerazione i dettagli completi di:

  • Client, tra cui:
    • Configurazione (locale, macchina virtuale di Azure e così via) o computer DBA.
    • Sistema operativo.
    • Software e versioni.
  • Connessione stringa e tutti i parametri inclusi.
  • Topologia di rete (stessa area? regole del firewall AZ? routing).
  • Connessione pool (parametri e configurazione), se è in uso.

È anche importante determinare se il problema di connettività del database influisce su un singolo dispositivo client o su più dispositivi client. Se gli errori interessano solo uno dei diversi client, è probabile che il problema si verifichi con il client. Tuttavia, se tutti i client riscontrano lo stesso errore, è più probabile che il problema si trovi sul lato server di database o con la rete.

Assicurarsi di considerare anche il potenziale di overload del carico di lavoro, soprattutto se un'applicazione apre un picco di connessioni in un periodo di tempo molto breve. È possibile usare metriche come "Total Connessione ions", "Active Connessione ions" e "Aborted Connessione ions" per esaminarlo.

Quando si stabilisce la connettività da un dispositivo client o da un'applicazione, la prima chiamata importante in mysql consiste nel ottenereaddrinfo, che esegue la conversione DNS dall'endpoint fornito a un indirizzo IP. Se il recupero dell'indirizzo ha esito negativo, MySQL visualizza un messaggio di errore, ad esempio "ERRORE 2005 (HY000): host server MySQL sconosciuto "mysql-example.mysql.database.azure.com" (11)" e il numero alla fine (11, 110 e così via).

Codici errore lato client 2005

Le note di riferimento rapido per alcuni codici di errore sul lato client 2005 vengono visualizzate nella tabella seguente.

CODICE ERRORE 2005 Note
(11) "EAI_SYSTEM - errore di sistema" Si è verificato un errore nella risoluzione DNS sul lato client. Non è un problema di server flessibile Database di Azure per MySQL. Usare dig/nslookup nel client per risolvere i problemi.
(110) "ETIMEDOUT - timeout Connessione" Si è verificato un timeout nella connessione al server DNS del client. Non è un problema di server flessibile Database di Azure per MySQL. Usare dig/nslookup nel client per risolvere i problemi.
(0) "nome sconosciuto" Il nome specificato non è stato risolvibile da DNS. Verificare l'input nel client. È molto probabile che non si verifichi un problema con Database di Azure per MySQL server flessibile.

La seconda chiamata in mysql è con connettività socket e quando si esamina un messaggio di errore come "ERRORE 2003 (HY000): Non è possibile connettersi a Database di Azure per MySQL server flessibile in "mysql-example.mysql.database.azure.com" (111)", il numero alla fine (99, 110, 111, 113 e così via).

Codici di errore sul lato client 2003

Le note di riferimento rapido per alcuni codici di errore sul lato client 2003 vengono visualizzate nella tabella seguente.

CODICE ERRORE 2003 Note
(99) "EADDRNOTAVAIL - Impossibile assegnare l'indirizzo richiesto" Questo errore non è causato da Database di Azure per MySQL server flessibile, ma sul lato client.
(110) "ETIMEDOUT - timeout Connessione" Si è verificato un timeout di connessione all'indirizzo IP specificato. È probabile che si tratti di un problema di sicurezza (regole del firewall) o di rete (routing). In genere, questo non è un problema con Database di Azure per MySQL server flessibile. Usare nc/telnet/TCPtraceroute nel dispositivo client per risolvere i problemi.
(111) "ECONNREFUSED - Connessione rifiutata" Mentre i pacchetti hanno raggiunto il server di destinazione, il server ha rifiutato la connessione. Potrebbe trattarsi di un tentativo di connessione al server errato o alla porta errata. Questo potrebbe anche essere correlato al servizio di destinazione (Database di Azure per MySQL server flessibile) inattivo, al ripristino dal failover o all'esecuzione del ripristino anomalo del sistema e non ancora all'accettazione delle connessioni. Questo problema potrebbe trovarsi sul lato client o sul lato server. Usare nc/telnet/TCPtraceroute nel dispositivo client per risolvere i problemi.
(113) "EHOSTUNREACH - Host non raggiungibile" La tabella di routing del dispositivo client non include un percorso alla rete in cui si trova il server di database. Controllare la configurazione di rete del dispositivo client.

Altri codici di errore

Le note di riferimento rapido per alcuni altri codici di errore correlati ai problemi che si verificano dopo che la connessione di rete con il server di database è stata stabilita correttamente, vengono visualizzate nella tabella seguente.

Codice errore Note
ERRORE 2013 "Connessione a MySQL persa" La connessione è stata stabilita, ma è stata persa in seguito. Questo può verificarsi se viene tentata una connessione a un elemento che non è MySQL, ad esempio, usando un client MySQL per connettersi a SSH sulla porta 22. Può verificarsi anche se l'utente con privilegi avanzati termina la sessione. Può verificarsi anche se il database raggiunge il timeout della sessione. In alternativa, può fare riferimento a problemi nel server di database, dopo aver stabilito la connessione. Questo può verificarsi in qualsiasi momento durante la durata della connessione client. Può indicare che il database ha avuto un problema grave.
ERRORE 1040 "Troppe connessioni" Il numero di client di database connessi è già al numero massimo configurato. È necessario valutare il motivo per cui vengono stabilite così tante connessioni sul database.
ERRORE 1045 "Accesso negato per l'utente" Il client ha fornito un nome utente o una password non corretti, pertanto, il database ha negato l'accesso.
ERRORE 2006 "MySQL server non è disponibile" Analogamente alla voce ERRORE 2013 "Connessione a MySQL server persa" nella tabella precedente.
ERRORE 1317 "L'esecuzione della query è stata interrotta" Errore che il client riceve quando l'utente primario arresta la query, non la connessione.
ERRORE 1129 "Host '1.2.3.4' bloccato a causa di molti errori di connessione" Sblocco con "mysqladmin flush-hosts": tutti i client in un singolo computer verranno bloccati se un client di tale computer tenta più volte di usare il protocollo errato per connettersi a MySQL (telnetting alla porta MySQL è un esempio). Come viene visualizzato il messaggio di errore, l'utente amministratore del database deve eseguire FLUSH HOSTS; per cancellare il problema.

Nota

Per altre informazioni sugli errori di connettività, vedere il post di blog Analisi dei problemi di connessione con Database di Azure per MySQL server flessibile.

Passaggi successivi

Per trovare risposte peer alle domande più importanti o per pubblicare o rispondere a una domanda, visitare Stack Overflow.