Debug dei problemi di connessione

Introduzione

In genere, i problemi di connessione rientrano in una delle seguenti tre 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 per l'indagine. La sezione seguente include esempi di domande che puoi porti per restringere ulteriormente il problema:

Elenco di controllo per i problemi di connessione

Messaggi di errore

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

Ulteriori procedure per la risoluzione dei problemi di connettività

Per altri problemi, consulta la sezione 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 l'applicazione non interrompe correttamente le connessioni. Anche i problemi di rete possono causare questo errore. L'errore non significa che ci siano problemi con l'istanza Cloud SQL. Ti consigliamo inoltre di eseguire tcpdump per esaminare i pacchetti e individuare l'origine del problema.

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

Verifica che i certificati non siano scaduti

Se la tua istanza è configurata per utilizzare SSL, vai alla pagina 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 ed eseguirne la rotazione.

Verifica di disporre dell'autorizzazione per connetterti

Se le connessioni non riescono, verifica di avere l'autorizzazione per connetterti:

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

    Le connessioni a un'istanza Cloud SQL che utilizza 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 dal proxy di autenticazione Cloud SQL. Gli intervalli di indirizzi non conformi a RFC 1918 devono essere configurati come reti autorizzate.

    Per impostazione predefinita, Cloud SQL non apprende le route di subnet non RFC 1918 dalla tua rete VPC. Devi aggiornare il peering di rete a Cloud SQL per esportare 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
  • Ecco il tuo indirizzo IP attuale.

Determina come vengono avviate le connessioni

Per visualizzare informazioni sulle connessioni attuali, connettiti al tuo database ed esegui il seguente comando:

sp_who
go

Le connessioni che mostrano un indirizzo IP, ad esempio 1.2.3.4, si connettono tramite IP. Le connessioni con cloudsqlproxy~1.2.3.4 utilizzano il proxy di autenticazione Cloud SQL oppure hanno avuto origine da App Engine. Le connessioni da localhost potrebbero essere utilizzate da alcuni processi Cloud SQL interni.

Limiti di connessione

Non sono previsti limiti di QPS per le istanze Cloud SQL. Tuttavia, sono in vigore limiti specifici per connessione, dimensioni e App Engine. Consulta la sezione Quote e limiti.

Le connessioni al database consumano risorse sul server e sull'applicazione di connessione. Utilizza sempre buone pratiche di gestione delle connessioni per ridurre al minimo l'impronta della tua applicazione e ridurre la probabilità di superare i limiti di connessione di Cloud SQL. Per saperne di più, vedi Gestione delle connessioni ai database.

Mostra connessioni e thread

Per visualizzare i processi in esecuzione sul tuo database, connettiti al database ed esegui questo comando:
sp_who
go

Per informazioni su come interpretare le colonne restituite da sp_who, consulta il riferimento di SQL Server.

Timeout delle 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 seguenti comandi impostano il valore TCP keepalive su un minuto e rendono permanente la configurazione dopo i riavvii dell'istanza.

Visualizza 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 dopo 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 di tcp_keepalive_time per verificare che la modifica sia stata applicata.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Strumenti per il debug della connettività

tcpdump

tcpdump è uno strumento per acquisire pacchetti. È consigliabile eseguire tcpdump per acquisire e ispezionare i pacchetti tra l'host e le istanze Cloud SQL durante il debug dei problemi di connettività.

Trovare il tuo indirizzo IP locale

Se non conosci l'indirizzo locale del tuo host, esegui il comando ip -br address show. Su Linux, vengono visualizzati 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.

Test con Connectivity Tests

Test di connettività è 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 runtime. Ora supporta Cloud SQL. Segui queste istruzioni per eseguire i test con le tue istanze Cloud SQL.

Esegui il test della connessione

Puoi utilizzare il client sqlcmd per testare la tua capacità di connetterti dal tuo ambiente locale. Per saperne di più, consulta Connessione del client sqlcmd tramite indirizzi IP e Connessione del client sqlcmd tramite il proxy di autenticazione Cloud SQL.

Determinare l'indirizzo IP della tua applicazione

Per determinare l'indirizzo IP di un computer che esegue la tua applicazione in modo da poter autorizzare l'accesso alla tua 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? sito per determinare il suo indirizzo IP.
  • Se il computer è protetto da un proxy o un firewall, accedi al computer e utilizza uno strumento o un servizio come whatismyipaddress.com per determinare il suo vero indirizzo IP.

Apri porte locali

Per verificare che l'host sia in ascolto sulle porte che ritieni, esegui il comando ss -tunlp4. Indica quali porte sono aperte e in ascolto.

Tutta l'attività della porta locale

Utilizza il comando netstat per visualizzare tutta l'attività della porta locale. Ad esempio, netstat -lt mostra tutte le porte attualmente attive.

Connettiti all'istanza Cloud SQL utilizzando telnet

Per verificare di poterti connettere all'istanza Cloud SQL utilizzando TCP, esegui il comando telnet. Telnet tenta di connettersi all'indirizzo IP e alla porta che fornisci.

In caso di esito positivo, viene visualizzato quanto segue:

Trying 35.193.198.159...

Connected to 35.193.198.159. .

In caso di errore, telnet rimane in attesa finché non forzi la chiusura del 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 rivedi le query di esempio di Cloud SQL.

Visualizza i log

Puoi visualizzare i log per le istanze Cloud SQL e altri progetti Google Cloud come Cloud VPN o istanze 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'istanza Cloud SQL.
    • Nomi dei log: scorri fino alla sezione Cloud SQL e seleziona i file di log appropriati per la tua istanza. Ad esempio:
    • Gravità: seleziona un livello di log.
    • Intervallo di tempo: seleziona un intervallo 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.

Indirizzi IP privati

Le connessioni a un'istanza Cloud SQL che utilizza un indirizzo IP privato sono autorizzate automaticamente per gli intervalli di indirizzi RFC 1918. Gli intervalli di indirizzi non RFC 1918 devono essere configurati in Cloud SQL come reti autorizzate. Devi anche aggiornare il peering di rete a Cloud SQL per esportare le route non RFC 1918. Ad esempio:

gcloud compute networks peerings update cloudsql-sqlserver-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.