Debug dei problemi di connessione

Introduzione

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

  • Connessione: riesci a raggiungere l'istanza sulla rete?
  • Autorizzazione - Hai l'autorizzazione per connetterti all'istanza?
  • Autenticazione in corso: il database accetta le credenziali del database?

Ognuna di queste opzioni può essere ulteriormente suddivisa in diversi percorsi per le indagini. La seguente sezione contiene alcuni esempi di domande che puoi porti per contribuire a circoscrivere ulteriormente il problema:

Elenco di controllo per i problemi di connessione

Messaggi di errore

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

Risolvere altri problemi di connettività

Per altri problemi, visita la sezione relativa alla connettività nella pagina di risoluzione dei problemi.

Problemi comuni di connessione

Verifica che la tua applicazione chiuda correttamente le connessioni

Se visualizzi errori contenenti"Aborted connection nnnn to db:", in genere significa che la tua applicazione non interrompe correttamente le connessioni. Anche i problemi di rete possono causare questo errore. L'errore non significa che ci sono problemi con la tua istanza Cloud SQL. Ti invitiamo inoltre a eseguire tcpdump per ispezionare i pacchetti per 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 l'istanza è configurata per l'utilizzo di SSL, vai alla pagina Istanze Cloud SQL nella console e apri l'istanza. Apri la pagina Connessioni e seleziona la scheda Sicurezza, quindi assicurati che il certificato del tuo server sia valido. Se è scaduto, devi aggiungere un nuovo certificato e ruotarlo.

Verifica di avere l'autorizzazione a eseguire la connessione

Se le connessioni non riescono, verifica di avere l'autorizzazione a connettersi:

  • Se hai problemi di connessione utilizzando un indirizzo IP, ad esempio ti stai connettendo 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 utilizzano un indirizzo IP privato vengono automaticamente autorizzate per gli intervalli di indirizzi RFC 1918. In questo modo, tutti i client privati possono accedere al database senza dover passare attraverso il proxy di autenticazione Cloud SQL. Gli intervalli di indirizzi non conformi alla RFC 1918 devono essere configurati come reti autorizzate.

    Cloud SQL non apprende le route di subnet non RFC 1918 dal tuo VPC per impostazione predefinita. Devi aggiornare il peering di rete in Cloud SQL per esportare eventuali 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 corrente.

Determinare l'avvio delle connessioni

Per visualizzare le informazioni sulle tue connessioni attuali, connettiti al tuo database ed esegui questo comando:

sp_who
go

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

Limiti di connessione

Non sono previsti limiti QPS per istanze Cloud SQL. Tuttavia, sono previsti limiti specifici per connessione, dimensioni e App Engine. Vedi Quote e limiti.

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

Mostra connessioni e thread

Per vedere i processi in esecuzione sul tuo database, connettiti al tuo database ed esegui il seguente comando:
sp_who
go

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

Timeout connessioni (da Compute Engine)

Connessioni con un timeout dell'istanza Compute Engine dopo 10 minuti di inattività. Questo può influire sulle connessioni inutilizzate a lunga durata tra l'istanza di Compute Engine e l'istanza di Cloud SQL. Per ulteriori informazioni, consulta la sezione Networking e firewall nella documentazione di Compute Engine.

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

Visualizza il valore corrente 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

Strumenti per eseguire il debug della connettività

tcpdump

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

Individuare l'indirizzo IP locale

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

Test con test di connettività

Il Test di connettività è uno strumento di diagnostica che consente di controllare la connettività tra gli endpoint nella tua rete. Analizza la 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 utilizzare il client sqlcmd per testare la tua capacità di connessione dal tuo ambiente locale. Per ulteriori informazioni, consulta Connessione del client sqlcmd tramite indirizzi IP e Connessione del client sqlcmd utilizzando il proxy di autenticazione Cloud SQL.

Determina 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? per determinare il suo indirizzo IP.
  • Se il computer si trova dietro 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.

Aprire le porte locali

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

Tutte le attività di trasferimento locale

Usa il comando netstat per vedere tutte le attività nella 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 gli hai fornito.

Se l'operazione va a buon fine, vedrai quanto segue:

Trying 35.193.198.159...

Connected to 35.193.198.159. .

In caso di errore, telnet si blocca finché non forza la chiusura del tentativo:

Trying 35.193.198.159...

^C. .

Cloud Logging

Cloud SQL e Cloud SQL utilizzano Cloud Logging. Per informazioni complete, consulta la documentazione di Cloud Logging e le query di esempio Cloud SQL.

Visualizza i log

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

console

  1. In Google Cloud Console, vai alla pagina Cloud Logging.

    Vai a Cloud Logging

  2. Seleziona un progetto Cloud SQL esistente nella parte superiore della pagina.
  3. Nel generatore di query, aggiungi quanto segue:
    • Risorsa: 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 l'istanza. Ad esempio:
    • Gravità: seleziona un livello di log.
    • Intervallo di tempo: seleziona un intervallo predefinito o crea un intervallo 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 utilizzano un indirizzo IP privato vengono automaticamente autorizzate per gli intervalli di indirizzi RFC 1918. Gli intervalli di indirizzi non conformi alla RFC 1918 devono essere configurati in Cloud SQL come reti autorizzate. Devi inoltre aggiornare il peering di rete in Cloud SQL per esportare eventuali 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.