Debug dei problemi di connessione

Introduzione

In genere, i problemi di connessione rientrano in una delle tre seguenti aree:

  • Connessione in corso: riesci a raggiungere la tua istanza tramite la rete?
  • Autorizzazione: disponi dell'autorizzazione per connetterti all'istanza?
  • Autenticazione: il database accetta le tue credenziali?

Ognuno di questi può essere ulteriormente suddiviso in percorsi diversi le indagini. La sezione seguente include esempi di domande che puoi farti per restringere ulteriormente il problema:

Elenco di controllo per i problemi di connessione

Messaggi di errore

Per messaggi di errore specifici relativi all'API, consulta la pagina di riferimento Messaggi di errore.

Ulteriori passaggi per la risoluzione dei problemi di connettività

Per altri problemi, consulta Connettività nella pagina di risoluzione dei problemi.

Problemi di connessione comuni

Verifica che l'applicazione chiuda correttamente le connessioni

Se visualizzi errori contenenti "Aborted connection nnnn to db:", in genere indica che la tua applicazione non interrompe correttamente le connessioni. Anche i problemi di rete possono causare questo errore. L'errore non significa che si sono verificati problemi con l'istanza Cloud SQL. Ti invitiamo inoltre a eseguire tcpdump per ispezionare i pacchetti e risalire all'origine del problema.

Per esempi di best practice per la gestione delle connessioni, consulta Gestione delle connessioni ai database.

Verificare che i certificati non siano scaduti

Se la tua istanza è configurata per utilizzare SSL, vai alla Pagina delle istanze Cloud SQL nella console Google Cloud e apri l'istanza. Apri la pagina Connessioni, seleziona la scheda Sicurezza e assicurati che il certificato del server sia valido. Se è scaduto, devi aggiungere un nuovo certificato e eseguire la rotazione.

Verifica di avere l'autorizzazione per la connessione

Se le connessioni non riescono, verifica di disporre dell'autorizzazione per connetterti:

  • Se hai difficoltà a connetterti utilizzando un indirizzo IP, ad esempio: ti connetti dal tuo ambiente on-premise con quindi assicurati che l'indirizzo IP da cui ti connetti è autorizzato a connettersi all'istanza Cloud SQL.

    Le connessioni a un'istanza Cloud SQL che utilizzano un indirizzo IP privato sono autorizzate automaticamente per gli intervalli di indirizzi RFC 1918. In questo modo, tutti i client privati possono accedere al database senza passare per il proxy di autenticazione Cloud SQL. Gli intervalli di indirizzi non RFC 1918 devono essere configurati come reti autorizzate.

    Cloud SQL non apprende le route di subnet non RFC 1918 dal VPC per impostazione predefinita. Per esportare eventuali route non RFC 1918, devi aggiornare il peering di rete con Cloud SQL. Ad esempio:

    gcloud compute networks peerings update cloudsql-mysql-googleapis-com \
    --network=NETWORK \
    --export-subnet-routes-with-public-ip \
    --project=PROJECT_ID
  • Ecco il tuo indirizzo IP attuale.

  • Prova la gcloud sql connect per connetterti all'istanza. Questo comando autorizza il tuo indirizzo IP per una per un breve periodo di tempo. Puoi eseguire questo comando in un ambiente con gcloud CLI e il client mysql installati. Puoi anche eseguire questo comando in Cloud Shell, disponibile in Console Google Cloud con gcloud CLI e il client mysql preinstallati. Cloud Shell fornisce un'istanza Compute Engine che puoi utilizzare per connetterti a Cloud SQL.
  • Consenti temporaneamente a tutti gli indirizzi IP di connettersi a un'istanza. Per IPv4, autorizza 0.0.0.0/0 (per IPv6, autorizza ::/0.

Verifica la modalità di connessione

Se viene visualizzato un messaggio di errore simile al seguente:

ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: NO)

quando ti connetti, verifica di fornire una password.

Se ricevi un messaggio di errore simile a:

ERROR 1045 (28000): Access denied for user 'root'@'1.2.3.4' (using password: YES)

quando ti connetti, verifica di utilizzare la password corretta e di eseguire la connessione tramite SSL, se l'istanza lo richiede.

Determina la modalità di avvio delle connessioni

Per visualizzare le informazioni sulle connessioni correnti, connettiti al database ed esegui il seguente comando:

SHOW PROCESSLIST;

Le connessioni che mostrano un indirizzo IP, come 1.2.3.4, si connettono tramite IP. Le connessioni con cloudsqlproxy~1.2.3.4 utilizzano il proxy di autenticazione Cloud SQL o provengono da App Engine. Le connessioni da localhost potrebbero essere utilizzata da alcuni processi interni di Cloud SQL.

Limiti di connessione

Non sono previsti limiti QPS per le istanze Cloud SQL. Tuttavia, sono previsti limiti specifici per connessioni, dimensioni e App Engine. Consulta: Quote e limiti.

Le connessioni al database consumano risorse sul server e sull'applicazione di connessione. Usa sempre buone pratiche di gestione della connessione per ridurre al minimo l'impronta della tua applicazione e riduci la probabilità di superare Limiti di connessione di Cloud SQL. Per ulteriori informazioni, vedi Gestione delle connessioni ai database

Mostra connessioni e thread

Se viene visualizzato il messaggio "Troppe connessioni" messaggio di errore o vuoi sapere che cos'è su un'istanza, puoi mostrare il numero di connessioni e thread con SHOW PROCESSLIST.

Da un client MySQL, esegui:

mysql> SHOW PROCESSLIST;

Viene visualizzato un output simile al seguente:

+----+-----------+--------------+-----------+---------+------+-------+----------------------+
| Id | User      | Host         | db        | Command | Time | State | Info                 |
+----+-----------+--------------+-----------+---------+------+-------+----------------------+
|  3 | user-name | client-IP    | NULL      | Query   |    0 | NULL  | SHOW processlist     |
|  5 | user-name | client-IP    | guestbook | Sleep   |    1 |       | SELECT * from titles |
| 17 | user-name | client-IP    | employees | Query   |    0 | NULL  | SHOW processlist     |
+----+-----------+--------------+-----------+---------+------+-------+----------------------+
3 rows in set (0.09 sec)

Per informazioni su come interpretare le colonne restituite da PROCESSLIST, consulta la documentazione di riferimento di MySQL.

Per ottenere il numero di thread, puoi utilizzare:

mysql> SHOW STATUS WHERE Variable_name = 'Threads_connected';

Viene visualizzato un output simile al seguente:

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 7     |
+-------------------+-------+
1 row in set (0.08 sec)

Timeout connessioni (da Compute Engine)

Le connessioni con un'istanza Compute Engine scadono dopo 10 minuti di inattività, il che può influire sulle connessioni inutilizzate di lunga durata tra l'istanza Compute Engine e l'istanza Cloud SQL. Per ulteriori informazioni, consulta Networking e firewall nella documentazione di Compute Engine.

Per mantenere attive le connessioni inutilizzate di lunga durata, puoi impostare il keepalive TCP. I comandi seguenti impostano il valore keepalive TCP su un minuto e la configurazione permanente tra i riavvii dell'istanza.

Mostra il valore corrente di tcp_keepalive_time.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Imposta tcp_keepalive_time su 60 secondi e rendilo permanente tra i riavvii.

echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf

Applica la modifica.

sudo /sbin/sysctl --load=/etc/sysctl.conf

Visualizza il valore tcp_keepalive_time per verificare che la modifica sia stata applicata.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Connettiti con IPv6

Se ricevi uno dei messaggi di errore

Can't connect to MySQL server on '2001:1234::4321' (10051)
Can't connect to MySQL server on '2001:1234::4321' (101)

quando ti connetti, è probabile che tu stia tentando di connetterti all'indirizzo IPv6 della tua istanza, ma non hai IPv6 disponibile sulla tua workstation. Puoi verificare se IPv6 è funzionale sulla tua workstation visitando il sito ipv6.google.com. Se non si carica, significa che IPv6 non è disponibile. Connettiti a IPv4 o l'istanza Cloud SQL. Potresti dover prima aggiungere un indirizzo IPv4 all'istanza.

Errori di connessione occasionali (alta disponibilità legacy)

Quando Cloud SQL riavvia un'istanza a causa di eventi di manutenzione, le connessioni potrebbero essere inoltrate alla replica di failover. Quando ti connetti a replica di failover:

  • Le richieste di lettura dai client che utilizzano connessioni non criptate hanno esito positivo normalmente. Tuttavia, le richieste di scrittura non vanno a buon fine e restituiscono un messaggio di errore, ad esempio "Errore 1290: il server MySQL è in esecuzione con l'opzione --read-only, pertanto non può eseguire questa istruzione".
  • Le richieste di lettura e scrittura dei client che utilizzano connessioni criptate non riescono e viene restituito un messaggio di errore, ad esempio "x509: il certificato è valido per "istanza-master, non-istanza-di failover".

Al termine dell'evento, Cloud SQL reimposta la connessione. Riprova a stabilire la connessione. Ti consigliamo di progettare le tue applicazioni per gestire occasionali errori di connessione implementando una strategia di gestione degli errori come e il backoff esponenziale. Per saperne di più, consulta la sezione Implementazione dell'applicazione.

Strumenti per il debug della connettività

tcpdump

tcpdump è uno strumento per acquisire i pacchetti. Ti consigliamo vivamente di eseguire tcpdump per acquisire e ispezionare i pacchetti tra l'host e le istanze Cloud SQL quando esegui il debug dei problemi di connettività.

Individuare l'indirizzo IP locale

Se non conosci l'indirizzo locale del tuo host, esegui Comando ip -br address show. Su Linux, viene mostrata l'interfaccia di rete, lo stato dell'interfaccia, l'IP locale e gli indirizzi MAC. Ad esempio: eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64.

In alternativa, puoi eseguire ipconfig o ifconfig per visualizzare lo stato delle interfacce di rete.

Esegui test con Connectivity Tests

Connectivity Test è uno strumento di diagnostica che consente di verificare la connettività tra gli endpoint della rete. Analizza la tua configurazione e, in alcuni casi, esegue la verifica in fase di esecuzione. Ora supporta Cloud SQL. Segui queste istruzioni per eseguire test con le tue istanze Cloud SQL.

Esegui il test della connessione

Puoi usare il client MySQL per testare la tua capacità di connessione dal tuo ambiente locale. Per ulteriori informazioni, vedi Connessione del client mysql tramite indirizzi IP e Connessione del client mysql tramite il proxy di autenticazione Cloud SQL.

Determina l'indirizzo IP della tua applicazione

Per determinare l'indirizzo IP di un computer su cui è in esecuzione la tua applicazione in modo da poter autorizzare l'accesso all'istanza Cloud SQL da quell'indirizzo, utilizza una delle seguenti opzioni:

  • Se il computer non è protetto da un proxy o da un firewall, accedi al computer e utilizza Qual è il mio IP? per determinare il relativo indirizzo IP.
  • Se il computer è protetto da un proxy o da un firewall, accedi al computer e usare uno strumento o un servizio come whatismyipaddress.com per determinarne il vero indirizzo IP.

Aprire le porte locali

Per verificare che l'host sia in ascolto sulle porte che pensi, esegui Comando ss -tunlp4. Indica quali porte sono aperte in ascolto. Ad esempio, se hai un database MySQL in esecuzione, la porta 3306 dovrebbe essere attiva e in ascolto. Per SSH, dovresti vedere la porta 22.

Tutta l'attività della porta locale

Usa il comando netstat per vedere tutte le attività delle porte locali. Per Ad esempio, netstat -lt mostra tutte le porte attualmente attive.

Connettiti all'istanza Cloud SQL utilizzando telnet

Per verificare la possibilità di connetterti all'istanza Cloud SQL utilizzando TCP, esegui il comando telnet. Telnet tenta di connettersi all'indirizzo IP e e la porta assegnata.

Ad esempio, se la tua istanza Cloud SQL esegue un database MySQL, dovresti essere in grado di connetterti tramite telnet alla porta 3306:telnet 35.193.198.159 3306.

Se l'operazione riesce, vedrai quanto segue:

Trying 35.193.198.159...

Connected to 35.193.198.159. .

In caso di errore, telnet si blocca finché non chiudi forzatamente il tentativo:

Trying 35.193.198.159...

^C. .

Cloud Logging

Cloud SQL e Cloud SQL utilizzano Cloud Logging. Consulta la documentazione di Cloud Logging per informazioni complete e le query di esempio di Cloud SQL.

Visualizza i log

Puoi visualizzare i log per le istanze Cloud SQL e altri servizi Google Cloud a progetti come le istanze Cloud VPN o Compute Engine. Per visualizzare i log per le voci di log dell'istanza Cloud SQL:

Console

  1. Nella console Google Cloud, vai alla pagina Cloud Logging.

    Vai a Cloud Logging

  2. Seleziona un progetto Cloud SQL esistente nella parte superiore della pagina.
  3. In Query Builder, aggiungi quanto segue:
    • Risorsa: seleziona Database Cloud SQL. Nella finestra di dialogo, seleziona un di Cloud SQL.
    • Nomi dei log: scorri fino alla sezione Cloud SQL e seleziona i file di log appropriati per la tua istanza. Ad esempio:
      • cloudsql.googlapis.com/mysql-general.log
      • cloudsql.googleapis.com/mysql.err
    • Gravità: seleziona un livello di log.
    • Intervallo di tempo: seleziona un valore preimpostato o creane uno personalizzato.

gcloud

Utilizza il comando gcloud logging per visualizzare le voci di log. Nell'esempio riportato di seguito, sostituisci PROJECT_ID. Il flag limit è un parametro facoltativo che indica il numero massimo di voci da restituire.

gcloud logging read "projects/PROJECT_ID/logs/cloudsql.googleapis.com/mysql-general.log" \
--limit=10

Indirizzi IP privati

Le connessioni a un'istanza Cloud SQL che utilizzano un indirizzo IP privato con l'autorizzazione automatica per RFC 1918 di indirizzi IP esterni. Gli intervalli di indirizzi non RFC 1918 devono essere configurati in Cloud SQL come reti autorizzate. Devi inoltre aggiornare il peering di rete a Cloud SQL Esportare tutte le route non RFC 1918. Ad esempio:

gcloud compute networks peerings update cloudsql-mysql-googleapis-com 
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID

Risoluzione dei problemi relativi alla VPN

Consulta la pagina Risoluzione dei problemi di Cloud VPN.